1 votes

Comment écrire tous les noms de répertoire dans un fichier texte ?

Je veux faire une liste de mes sous-répertoires. Lorsque j'exécute la commande suivante boucle for, le premier nom de répertoire apparaît deux fois

for d in */; do
     echo $d >> directories.txt
done

Le résultat est le suivant :

ONE/
TWO/
ONE/

Où est le problème ?

5voto

George Udosen Points 33267

En améliorant votre code actuel, cette commande devrait être utile :

for d in ./*;do [[ -d "$d" ]] && echo "$d" >> dir.txt; done

Pour retirer le ./ de la sortie :

for d in ./*;do [[ -d "$d" ]] && echo "${d##./}" >> dir.txt; done

2voto

Leo Points 441

Vous ajoutez les entrées (>>) où vous devez les écraser (>) . Il est préférable d'utiliser find . Pour trouver tous les sous-répertoires de manière récursive, utilisez

find . -type d > directories.txt

Pour trouver les sous-répertoires uniquement dans le répertoire courant, utilisez

find . -type d -maxdepth 1 > directories.txt

-type d indique à find de ne lister que les fichiers du répertoire.

1voto

Maciek Points 131

Ce qui me surprend, c'est l'absence de point-virgule ( ;) dans votre solution, est-ce que votre problème persiste quand vous le faites :

for d in *; do echo $d >> directories.txt; done

? Cela fonctionne bien pour moi. De plus, vous êtes sûr que vous l'exécutez en bash ? Enfin, le ">>" pourrait être le problème, vous pourriez ajouter le nom des répertoires plusieurs fois.

Sans compter que si vous voulez lister uniquement les répertoires (pas les fichiers), vous pourriez plutôt le faire :

for d in `find . -type d -maxdepth 1`; do echo $d >> directories.txt; done

ou encore plus simple :

find . -type d -maxdepth 1 > directories.txt

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X