Boucle sur les répertoires avec des espaces blancs dans Bash
Dans un script bash, je veux parcourir tous les répertoires dans le présent répertoire de travail et de faire des choses pour eux. Ils peuvent contenir de caractères spéciaux, en particulier les espaces. Comment puis-je le faire? J'ai:
for dir in $( ls -l ./)
do
if [ -d ./"$dir" ]
mais cela saute mes répertoires avec des espaces dans leur nom. Toute aide est appréciée.
Vous devez vous connecter pour publier un commentaire.
Donner à ceci un essai:
shopt -s dotglob
. Si le répertoire courant peut ne pas avoir de sous-répertoires, vous devez également définirshopt -s nullglob
(le placer juste au cas où).shopt -s globstar; for dir in /some/dir/*/
. Le répertoire de spec fera, la magie est dans l'ajout de la dernière barre oblique après le glob.Faites votre choix de solutions:
http://www.cyberciti.biz/tips/handling-filenames-with-spaces-in-bash.html
L'idée générale est de modifier la valeur par défaut élément de séparation (IFS).
find . -print0 | while read -d $'\0' file
pour configurer undo
boucle avec la variablefile
.Il existe de multiples façons. Ici est quelque chose qui est très rapide:
Cela va scanner /votre/dir de manière récursive pour les répertoires et tous les chemins d'accès à la commande "echo" (échange de votre besoin). Elle peut se faire l'écho de multiples fois, mais il va essayer de passer autant de noms de répertoire que la console permet à la fois. Ce qui est extrêmement rapide car peu de processus doivent être démarré. Mais il ne fonctionne que sur les programmes qui peuvent prendre une quantité arbitraire de valeurs comme des options.
-print0 dit trouver pour séparer les chemins d'accès aux fichiers à l'aide d'un zéro octet (et de 0 indique xargs pour lire des arguments séparés par des zéro octet)
Si vous n'avez pas la plus récente, vous pouvez le faire:
ou
L'option-n 1 dira xargs de ne pas passer plus d'arguments que l'un en même temps à votre programme.
Si vous ne voulez pas de trouver à analyser de manière récursive, vous pouvez spécifier la profondeur de l'option pour désactiver la récursivité (je ne connais pas la syntaxe par coeur quand même).
Mais si c'est utilisable dans votre script est une autre question ;-).