Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Linux > Applications > Shell

Shell Vos questions sur l'utilisation des commandes shell

Réponse
 
Outils de la discussion
Vieux 02/08/2008, 23h00   #1 (permalink)
Invité de passage
 
Date d'inscription: août 2008
Messages: 6
Par défaut Récupération du noms des fichiers dans un répertoire

Bonsoir,

Débutant en linux, j'ai besoin de votre aide pour un petit problème que je n'ai pas réussi à trouver.

Problem: J'ai un répertoire contenant des fichiers de formats différents (html, doc, etc). J'ai créé une fonction permettant de récupérer les données que j'aurai besoin. Pour l'instant aucun souci de ce coté. Cependant en sortie, la seule chose que je sais faire c'est que les résultats sont récupérés dans un fichier .txt.

Ce que je voudrais (mais pas réussi), c'est de mettre les données récupérées dans un fichier .txt avec le nom du fichier de départ.

Je m'explique:

fichiers de départ: lolo.htm, lolo1.htm, lolo2.htm
==> fonction
résultats de lolo.htm > lolo.txt
résultats de lolo1.htm > lolo1.txt
résultats de lolo2.htm > lolo.txt

j'espère que j'ai bien expliqué. J'ai utilisé "echo $... > fichier.txt" mais sans résultats.

Merci d'avance pour vos aides.
tulipelover est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 02/08/2008, 23h14   #2 (permalink)
Membre émérite
 
Date d'inscription: septembre 2002
Localisation: Bruxelles
Âge: 30
Messages: 955
Par défaut

Salut,

pourrais-tu mettre ta fonction histoire de voir un peu plus clair?

Merci d'avance,
Mygale1978 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/08/2008, 00h20   #3 (permalink)
Invité de passage
 
Date d'inscription: août 2008
Messages: 6
Par défaut

voici ma petite fonction:

Code :
#!/bin/sh
rep=/var/test/*
result=md4List=/var/test/resultats.log

#fonction
recup_htm () {
            recupHref=$(cat $i | grep -i "href=")
                   }

#récupération des données
for i in `find $rep -type f -name ".htm"`  ; do
recup_htm $i
echo "$recupHref" >>$result
done
Pour l'instant mes résultats ne sont que dans le fichier "result".


Voila petite fonction, cependant, dans le répertoire j'ai des fichiers en htm avec des noms différents. Je voudrais que ma fonction traite ces fichiers puis mettre les résultats correspondant au chacun de fichiers dans des fichiers .txt avec les noms des fichiers de départs.

(départ: toto.htm, tata.htm, titi.htm => fonction => résultat de toto.htm dans "toto.txt", puis résultat de tata.htm.txt, puis résultat de titi.htm dans titi.txt).

Merci pour votre aide


Citation:
Envoyé par Mygale1978 Voir le message
Salut,

pourrais-tu mettre ta fonction histoire de voir un peu plus clair?

Merci d'avance,

Dernière modification par al1_24 ; 03/08/2008 à 11h55
tulipelover est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/08/2008, 01h18   #4 (permalink)
Membre émérite
 
Date d'inscription: septembre 2002
Localisation: Bruxelles
Âge: 30
Messages: 955
Par défaut

Hello,

Voici une suggestion

Code :
#!/bin/sh

source_path='/var/test/'
target_path='/var/dest/'

#fonction
recup_htm () {
sourceExt='.htm'
#extension pour le fichier résultat
targetExt='.txt'

#Je suppose que tous tes fichiers ont la structure "nom.ext"
#Je récupère le nom du fichier sans l'extension
fileName=$(basename $1 $sourceExt)

#Je traite le résultat et je le redirige vers le fichier résultat de même nom
grep -i "href=" $1 > ${target_path}${fileName}${targetExt}
}

#récupération des données
for file in `find ${source_path} -type f -name "*.htm"` ; do
recup_htm ${file}
done

Dernière modification par Mygale1978 ; 03/08/2008 à 01h47
Mygale1978 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/08/2008, 01h35   #5 (permalink)
Invité de passage
 
Date d'inscription: août 2008
Messages: 6
Par défaut

salut,

je teste ca tout de suite, merci encore


Citation:
Envoyé par Mygale1978 Voir le message
Hello,

Voici une suggestion

Code :
#!/bin/sh

source_path='/var/test/'
target_path='/var/dest/'

#fonction
recup_htm () {

sourceExt='.htm'
#extension pour le fichier résultat
targetExt='.txt'

#Je suppose que tous tes fichiers ont la structure "nom.ext"
#Je récupère le nom du fichier sans l'extension
fileName=$(basename $1 $sourceExt)

#Je traite le résultat et je le redirige vers le fichier résultat de même nom
grep -i "href=" $1 > ${source_path}${fileName}${targetExt}
}

#récupération des données
for file in `find ${source_path} -type f -name "*.htm"` ; do
recup_htm ${source_path}${file}
done
tulipelover est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/08/2008, 01h49   #6 (permalink)
Membre émérite
 
Date d'inscription: septembre 2002
Localisation: Bruxelles
Âge: 30
Messages: 955
Par défaut

Hello,

une petite erreur dans le script

Code :
recup_htm ${source_path}${file}
doit être remplacé par

Code :
recup_htm ${file}
Mygale1978 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/08/2008, 02h21   #7 (permalink)
Invité de passage
 
Date d'inscription: août 2008
Messages: 6
Par défaut

Desolé, c'est peut-etre idiot comme question, mais je ne vois pas à quel moment tu utilises la variable $target_path. Pourrais tu m'éclairer ?


Citation:
Envoyé par Mygale1978 Voir le message
Hello,

une petite erreur dans le script

Code :
recup_htm ${source_path}${file}
doit être remplacé par

Code :
recup_htm ${file}
tulipelover est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/08/2008, 14h21   #8 (permalink)
Membre émérite
 
Date d'inscription: septembre 2002
Localisation: Bruxelles
Âge: 30
Messages: 955
Par défaut

Oui sorry autre petite erreur

Enfin ça n'a pas trop d'impact étant donné que si tu utilises source_path tes fichiers d'origine et résultat seront placés dans le même répertoire.
J'avais utilisé la variable $target_path au cas où tu aurais eu envie de mettre les fichiers résultats à un autre endroit.

Code :
grep -i "href=" $1 > ${source_path}${fileName}${targetExt}
doit être remplacer par

Code :
grep -i "href=" $1 > ${target_path}${fileName}${targetExt}
Mygale1978 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/08/2008, 15h21   #9 (permalink)
Invité de passage
 
Date d'inscription: août 2008
Messages: 6
Par défaut

Merci , j'ai pensé à ca aussi. J'ai testé mais ca n'a pas marché, ca m'indique : cat "Aucun fichier ou dossier de ce typetest/"

J'ai vérifié par tout, les fichiers htm sont bien à l'intérieur du dossier /test, je ne comprends pas d'ou vient cet erreur.


Ensuite pour la récupération du nom de fichier sans extension, ca n'a pas bien marché aussi, il récupère seulement ".htm" et non pas "toto"


Citation:
Envoyé par Mygale1978 Voir le message
Oui sorry autre petite erreur

Enfin ça n'a pas trop d'impact étant donné que si tu utilises source_path tes fichiers d'origine et résultat seront placés dans le même répertoire.
J'avais utilisé la variable $target_path au cas où tu aurais eu envie de mettre les fichiers résultats à un autre endroit.

Code :
grep -i "href=" $1 > ${source_path}${fileName}${targetExt}
doit être remplacer par

Code :
grep -i "href=" $1 > ${target_path}${fileName}${targetExt}
tulipelover est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/08/2008, 17h33   #10 (permalink)
Membre émérite
 
Date d'inscription: septembre 2002
Localisation: Bruxelles
Âge: 30
Messages: 955
Par défaut

Citation:
Envoyé par tulipelover Voir le message
Merci , j'ai pensé à ca aussi. J'ai testé mais ca n'a pas marché, ca m'indique : cat "Aucun fichier ou dossier de ce typetest/"

J'ai vérifié par tout, les fichiers htm sont bien à l'intérieur du dossier /test, je ne comprends pas d'ou vient cet erreur.


Ensuite pour la récupération du nom de fichier sans extension, ca n'a pas bien marché aussi, il récupère seulement ".htm" et non pas "toto"
l'erreur signifie simplement qu'il ne trouve pas le fichier ou répertoire.

concernant les fichiers sans extension c'est normal car j'ai bien spécifié dans mon script que je supposais que ton fichier avait la structure "nom.ext"

Pourrais-tu recoller ton script stp?
Mygale1978 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/08/2008, 17h57   #11 (permalink)
Membre émérite
 
Date d'inscription: septembre 2002
Localisation: Bruxelles
Âge: 30
Messages: 955
Par défaut

J'ai modifié le script pour qu'il prenne en compte les fichiers sans extension.


Code :
#!/bin/sh

source_path='/root/test/'
target_path='/root/test/'


#fonction
recup_file () {
#echo $1
sourceExt="$2"
#extension pour le fichier résultat
targetExt="$3"

#Je suppose que tous tes fichiers ont la structure "nom.ext"
#Je récupère le nom du fichier sans l'extension
fileName=$(basename $1 $sourceExt)

#Je traite le résultat et je le redirige vers le fichier résultat de même nom
grep -i "href=" $1 > ${target_path}${fileName}${targetExt}
}

#récupération des données pour les fichiers htm
for file in `find ${source_path} -type f -name "*.htm"` ; do
recup_file ${file} '.htm' '.txt'
done


#récupération des données pour les fichiers sans extension
for file in `find ${source_path} -type f | grep -v ".*\..*"` ; do
recup_file ${file} '' '.txt'
#echo $file
done

Test:

Code :
[root@intranet test]# ls -l
total 16
-rw-r--r--  1 root root   6 aoû  3 01:15 index1.htm
-rw-r--r--  1 root root   6 aoû  3 01:15 index2.htm
-rw-r--r--  1 root root   6 aoû  3 01:15 index3.htm
-rw-r--r--  1 root root   0 aoû  3 17:32 tata
-rwxr-xr-x  1 root root 776 aoû  3 17:43 test.sh
-rw-r--r--  1 root root   0 aoû  3 17:32 titi
-rw-r--r--  1 root root   0 aoû  3 17:32 toto
[root@intranet test]# ./test.sh
[root@intranet test]# ls -l
total 28
-rw-r--r--  1 root root   6 aoû  3 01:15 index1.htm
-rw-r--r--  1 root root   6 aoû  3 17:48 index1.txt
-rw-r--r--  1 root root   6 aoû  3 01:15 index2.htm
-rw-r--r--  1 root root   6 aoû  3 17:48 index2.txt
-rw-r--r--  1 root root   6 aoû  3 01:15 index3.htm
-rw-r--r--  1 root root   6 aoû  3 17:48 index3.txt
-rw-r--r--  1 root root   0 aoû  3 17:32 tata
-rw-r--r--  1 root root   0 aoû  3 17:48 tata.txt
-rwxr-xr-x  1 root root 776 aoû  3 17:43 test.sh
-rw-r--r--  1 root root   0 aoû  3 17:32 titi
-rw-r--r--  1 root root   0 aoû  3 17:48 titi.txt
-rw-r--r--  1 root root   0 aoû  3 17:32 toto
-rw-r--r--  1 root root   0 aoû  3 17:48 toto.txt
Tu peux également faire des echos de tes variables pour voir ce qui est fait exactement au niveau du script
Mygale1978 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/08/2008, 19h10   #12 (permalink)
Invité de passage
 
Date d'inscription: août 2008
Messages: 6
Par défaut

salut mygale,

après avoir testé, ca fonctionne très bien, je te remercie bien, c sympa t'avoir rencontré.

J'ai compris presque sauf la fonction basename. Mébon je chercherai pour comprendre pourquoi tu a écrit de cette manière.

Merci, et bon w-e à toi.

A bientôt

Citation:
Envoyé par Mygale1978 Voir le message
J'ai modifié le script pour qu'il prenne en compte les fichiers sans extension.


Code :
#!/bin/sh

source_path='/root/test/'
target_path='/root/test/'


#fonction
recup_file () {
#echo $1
sourceExt="$2"
#extension pour le fichier résultat
targetExt="$3"

#Je suppose que tous tes fichiers ont la structure "nom.ext"
#Je récupère le nom du fichier sans l'extension
fileName=$(basename $1 $sourceExt)

#Je traite le résultat et je le redirige vers le fichier résultat de même nom
grep -i "href=" $1 > ${target_path}${fileName}${targetExt}
}

#récupération des données pour les fichiers htm
for file in `find ${source_path} -type f -name "*.htm"` ; do
recup_file ${file} '.htm' '.txt'
done


#récupération des données pour les fichiers sans extension
for file in `find ${source_path} -type f | grep -v ".*\..*"` ; do
recup_file ${file} '' '.txt'
#echo $file
done

Test:

Code :
[root@intranet test]# ls -l
total 16
-rw-r--r--  1 root root   6 aoû  3 01:15 index1.htm
-rw-r--r--  1 root root   6 aoû  3 01:15 index2.htm
-rw-r--r--  1 root root   6 aoû  3 01:15 index3.htm
-rw-r--r--  1 root root   0 aoû  3 17:32 tata
-rwxr-xr-x  1 root root 776 aoû  3 17:43 test.sh
-rw-r--r--  1 root root   0 aoû  3 17:32 titi
-rw-r--r--  1 root root   0 aoû  3 17:32 toto
[root@intranet test]# ./test.sh
[root@intranet test]# ls -l
total 28
-rw-r--r--  1 root root   6 aoû  3 01:15 index1.htm
-rw-r--r--  1 root root   6 aoû  3 17:48 index1.txt
-rw-r--r--  1 root root   6 aoû  3 01:15 index2.htm
-rw-r--r--  1 root root   6 aoû  3 17:48 index2.txt
-rw-r--r--  1 root root   6 aoû  3 01:15 index3.htm
-rw-r--r--  1 root root   6 aoû  3 17:48 index3.txt
-rw-r--r--  1 root root   0 aoû  3 17:32 tata
-rw-r--r--  1 root root   0 aoû  3 17:48 tata.txt
-rwxr-xr-x  1 root root 776 aoû  3 17:43 test.sh
-rw-r--r--  1 root root   0 aoû  3 17:32 titi
-rw-r--r--  1 root root   0 aoû  3 17:48 titi.txt
-rw-r--r--  1 root root   0 aoû  3 17:32 toto
-rw-r--r--  1 root root   0 aoû  3 17:48 toto.txt
Tu peux également faire des echos de tes variables pour voir ce qui est fait exactement au niveau du script
tulipelover est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/08/2008, 21h47   #13 (permalink)
Membre émérite
 
Date d'inscription: septembre 2002
Localisation: Bruxelles
Âge: 30
Messages: 955
Par défaut

Salut,

concernant la fonction basename tu pourras très facilement trouver son utilité sur google ou alors en faisant un man basename
Je l'ai utilisé pour pouvoir récupérer uniquement le nom du fichier car sinon on a le chemin complet.

exemple:


Pour le fichier /root/test/toto, la commande
Code :
$ basename /root/test/toto
te retournera la valeur "toto"

pour le chemin /root/test/index.htm, la commande

Code :
$basename /root/test/index.htm .htm
te retournera "index" ainsi tu peux avoir le nom du fichier sans son extension et pouvoir lui associé une autre extension
Mygale1978 est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Linux > Applications > Shell



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide