Communauté Informatique NDFR.net : Un peu de bash... - Unix/Linux Client
Reply
Un peu de bash...
Thread Tools Display Modes
  #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
  #2  
Old 06-12-2005, 22:05
KnuX's Avatar
KnuX KnuX is offline
Membre senior
 
Join Date: 08-12-2002
Age: 39
Posts: 1,117
Une solution trouvée :

Code:
find Source/* | while read i; do echo "-> $i"; done
Quote:
-> 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
Par contre, si je veux faire un prompt pour confirmer une action sur un fichier par exemple, je ne peux pas utiliser "read UneVariable" pour récupérer la réponse de l'utilisateur puisque je suis déjà dans un read
__________________
http://max.skyrock.com/
Reply With Quote
Reply

Bookmarks


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Kernel Mandrake 9.2 problème. Spycam Unix/Linux Client 51 22-12-2003 12:29

All times are GMT +2. The time now is 00:35.

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.