![]() |
| 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é. | |||||||
|
|||||||
| Shell Vos questions sur l'utilisation des commandes shell |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Invité de passage
![]() Date d'inscription: août 2008
Messages: 6
|
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. |
|
|
|
|
|
#3 (permalink) |
|
Invité de passage
![]() Date d'inscription: août 2008
Messages: 6
|
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
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 Dernière modification par al1_24 ; 03/08/2008 à 11h55 |
|
|
|
|
|
#4 (permalink) |
|
Membre émérite
![]() Date d'inscription: septembre 2002
Localisation: Bruxelles
Âge: 30
Messages: 955
|
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 |
|
|
|
|
|
#5 (permalink) | |
|
Invité de passage
![]() Date d'inscription: août 2008
Messages: 6
|
salut,
je teste ca tout de suite, merci encore Citation:
|
|
|
|
|
|
|
#8 (permalink) |
|
Membre émérite
![]() Date d'inscription: septembre 2002
Localisation: Bruxelles
Âge: 30
Messages: 955
|
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}
Code :
grep -i "href=" $1 > ${target_path}${fileName}${targetExt}
|
|
|
|
|
|
#9 (permalink) | |
|
Invité de passage
![]() Date d'inscription: août 2008
Messages: 6
|
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:
|
|
|
|
|
|
|
#10 (permalink) | |
|
Membre émérite
![]() Date d'inscription: septembre 2002
Localisation: Bruxelles
Âge: 30
Messages: 955
|
Citation:
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? |
|
|
|
|
|
|
#11 (permalink) |
|
Membre émérite
![]() Date d'inscription: septembre 2002
Localisation: Bruxelles
Âge: 30
Messages: 955
|
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 |
|
|
|
|
|
#12 (permalink) | |
|
Invité de passage
![]() Date d'inscription: août 2008
Messages: 6
|
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:
|
|
|
|
|
|
|
#13 (permalink) |
|
Membre émérite
![]() Date d'inscription: septembre 2002
Localisation: Bruxelles
Âge: 30
Messages: 955
|
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 pour le chemin /root/test/index.htm, la commande Code :
$basename /root/test/index.htm .htm |
|
|
|
![]() |
![]() |
||
Récupération du noms des fichiers dans un répertoire
|
||
| Outils de la discussion | |
|
|