View Single Post
  #1  
Old 06-12-2005, 16:53
KnuX's Avatar
KnuX KnuX is offline
Membre senior
 
Join Date: 08-12-2002
Age: 39
Posts: 1,117
Un peu de bash...

Yop

Je cherche à faire un script qui parcours un répertoire en prenant en compte aussi bien les fichiers contenants des espaces ainsi que ceux commençant par un point.

La syntaxe de ce script serait la suivante : monscript <source_a_parcourir>
Donnant ainsi :
Quote:
$ monscript Source/
----

Soit un dossier source à parcourir :
Quote:
$ tree -a Source/
Source/
|-- dossier avec espaces
| |-- .hidden
| |-- fichier avec espaces
| `-- fichier_sans_espace
`-- dossier_sans_espace
|-- .hidden
|-- fichier avec espaces
`-- fichier_sans_espace

2 directories, 6 files
Pour chacun de ces fichiers, je veux donc pouvoir préciser des actions en fonction du type, de la date, etc. Bref, une liste d'instructions.

J'ai trouvé la commande "find" munie de son option "-exec" qui permet d'exécuter une commande en connaissant le fichier parcouru. Ok, mais elle ne m'aide pas, je n'ai pas trouvé moyen de lui préciser une suite d'instruction bash sans avoir mon script en deux fichiers.

Ensuite, j'ai trouvé le parcours des résultats de find, avec un for :
Code:
$ for i in $(find Source/); do echo "-> $i"; done;
Seulement le résultat laisse à désirer... Il sépare bien les fichiers mais aussi quand il y a des espaces
Quote:
-> Source/
-> Source/dossier
-> avec
-> espaces
-> Source/dossier
-> avec
-> espaces/fichier_sans_espace
-> Source/dossier
-> avec
-> espaces/fichier
-> avec
-> espaces
-> Source/dossier
-> avec
-> espaces/.hidden
-> Source/dossier_sans_espace
-> Source/dossier_sans_espace/fichier_sans_espace
-> Source/dossier_sans_espace/fichier
-> avec
-> espaces
-> Source/dossier_sans_espace/.hidden
En continuant de chercher, j'obtiens le code suivant :
Code:
$ for i in Source/*; do echo "-> $i"; done;
Mais ce n'est ni récursif (à moins d'imbriquer des for ?) et il me faudra faire en double pour les fichiers cachés (commençant par un point).
Quote:
-> Source/dossier avec espaces
-> Source/dossier_sans_espace
Quelqu'un aurait une idée ?
Je pensais à convertir les espaces par un motif, à la sortie du find, mais si un de mes fichiers vient à contenir le motif, c'est fichu...

La manière dont le "*" ne cause pas problème pour les espaces tandis qu'avec le "find", ça foire, ça m'épate !
__________________
http://max.skyrock.com/
Reply With Quote