Bash: comment parcourir la structure du répertoire et exécuter des commandes?
J'ai couper un gros fichier texte dans un certain nombre de plus petits pour les tests de performances que je suis en train de faire. Il y a un certain nombre de répertoires comme ceci:
/home/brianly/output-02 (contains 2 files myfile.chunk.00 and myfile.chunk.01)
/home/brianly/output-04 (contains 4 files...)
/home/brianly/output-06 (contains 6 files...)
Il est important de noter qu'il y a une augmentation du nombre de fichiers dans chaque répertoire. Ce dont j'ai besoin pour faire est d'exécuter un fichier exécutable à l'encontre de chacun des fichiers texte dans la sortie des répertoires. La commande ressemble à quelque chose comme ceci à l'encontre d'un seul fichier:
./myexecutable -i /home/brianly/output-02/myfile.chunk.00 -o /home/brianly/output-02/myfile.chunk.00.processed
Ici le paramètre-i est le fichier d'entrée et le paramètre-o est l'emplacement de la sortie.
En C#, je serais en boucle sur les répertoires d'obtenir la liste des fichiers dans chaque dossier, puis la boucle sur eux pour exécuter le commandlines. Comment puis-je traverse une structure de répertoire comme ceci en utilisant bash, et exécuter la commande avec les paramètres corrects en fonction de l'emplacement et les fichiers à cet emplacement?
OriginalL'auteur Brian Lyttle | 2009-06-16
Vous devez vous connecter pour publier un commentaire.
Pour ce genre de chose que j'ai toujours utiliser trouver avec xargs:
Maintenant depuis votre script ne traite qu'un seul fichier à la fois, en utilisant -exec (ou -execdir) directement avec trouver, comme l'a déjà suggéré, est tout aussi efficace, mais je suis habituée à l'aide de xargs, comme c'est généralement beaucoup plus efficace lors de l'alimentation de commande d'exploitation sur de nombreux arguments à la fois. Donc c'est un outil très utile pour garder dans la ceinture d'utilité, alors j'ai pensé qu'il doit être mentionné.
OriginalL'auteur Lars Haugseth
Quelque chose comme:
pour x in $(find /home/brianonly -type f); do ... done $() est si beaucoup plus lisible que les tiques. Mon $.02.
Je pense que le vôtre serait d'essayer de traiter les fichiers traités.
Dennis, vous avez raison. Je suis debout par mon exclusion de: quelque chose comme 🙂
OriginalL'auteur nikudesu
Comme d'autres l'ont suggéré, l'utilisation
find(1)
:OriginalL'auteur Adam Rosenfield
À partir de l'information fournie, il semble que ce serait une toute simple traduction de votre C# idée.
OriginalL'auteur ephemient
C'est ce que l'
find
commande.http://linux.die.net/man/1/find
OriginalL'auteur S.Lott
Utilisation de rechercher et exec. Jetez un oeil à la suite
http://tldp.org/LDP/abs/html/moreadv.html
OriginalL'auteur Methos