web-dev-qa-db-fra.com

Liste récursivement tous les répertoires et fichiers

Je souhaite recevoir la sortie suivante.

Supposons que la structure de répertoires du système de fichiers soit la suivante:

 -dir1 
 -dir2 
 -file1 
 -file2 
 -dir3 
 -file3 
 -file4 
 -dir4 
 -file5 
 -dir5 
 -dir6 
 -dir7 

La sortie du script doit être comme:

Répertoires:

/dir1 
/dir1/dir2 
/dir1/dir2/dir3 
/dir1/dir2/dir4 
/dir1/dir5 
/dir1/dir5/dir6 
/dir1/dir5/dir7 

Des dossiers:

/dir1 
/dir1/dir2/file1 
/dir1/dir2/file2 
/dir1/dir2/dir3/file3 
/dir1/dir2/dir3/file4 
/dir1/dir2/dir4/file5 
/dir1/dir5/dir6 
/dir1/dir5/dir7 

Pourriez-vous me dire comment conserver la sortie de find . -type d et find . -type f dans un autre fichier?

43
Christopher

Sous Windows, pour répertorier uniquement les répertoires:

dir /ad /b /s

pour lister tous les fichiers (et aucun répertoire):

dir /a-d /b /s

rediriger la sortie vers un fichier:

dir /a-d /b /s > filename.txt

les paramètres de la commande dir expliqués sur wikipedia

84
Andrea Bertani

dans Shell:

find . -type d

donne les répertoires du répertoire de travail actuel et:

find . -type f

donne les fichiers du répertoire de travail actuel.

Remplacer . par votre répertoire d'intérêt.

22
mouviciel

Bash/Linux Shell

Répertoires:

find ./ -type d 

Des dossiers:

find ./ -type f 

Bash/Shell dans un fichier

Répertoires:

find ./ -type d  > somefile.txt

Des dossiers:

find ./ -type f  > somefile.txt
21
Kent Fredric

Sous Windows, vous pouvez le faire comme ceci en tant que solution la plus flexible qui vous permet en outre de traiter les noms de répertoire.

Vous utilisez FOR/R pour exécuter récursivement des commandes batch.

Consultez ce fichier de commandes.

@echo off
SETLOCAL EnableDelayedExpansion

SET N=0
for /R %%i in (.) do (
     SET DIR=%%i

     ::put anything here, for instance the following code add dir numbers.
     SET /A N=!N!+1
     echo !N! !DIR!
)

Similaire pour les fichiers, vous pouvez ajouter un motif sous forme d'un ensemble au lieu d'un point, dans votre cas

 (*.*)
7
majkinetor

C'est une vieille question, mais je pensais ajouter quelque chose de toute façon.

DIR ne traverse pas correctement toutes les arborescences de répertoires que vous souhaitez, en particulier celles de C :. Il abandonne simplement par endroits en raison de protections différentes.

ATTRIB fonctionne beaucoup mieux, car il en trouve plus. (Pourquoi cette différence? Pourquoi MS ferait fonctionner un utilitaire dans un sens et un autre dans ce domaine? Damné si je sais.) D'après mon expérience, le moyen le plus efficace de gérer cela, bien que ce soit un peu compliqué, est d'obtenir deux listes:

attrib/s/d C: \>% TEMP%\C-avec-répertoires.txt

attrib/s C: \>% TEMP%\C-sans-répertoires.txt

et faire la différence entre eux. Cette différence, ce sont les répertoires sur C: (sauf ceux qui sont trop bien cachés). Pour C :, je le fais généralement en tant qu'administrateur.

3
djc

Sous Windows:

dir/ad/b/s

dir/a-d/b/s

3
Peter

Sous Linux, un simple

find . -printf '%y %p\n'

vous donnera une liste de tous les éléments contenus, avec des répertoires et des fichiers mélangés. Vous pouvez enregistrer cette sortie dans un fichier temporaire, puis extraire toutes les lignes commençant par "d"; ce seront les répertoires. Les lignes qui commencent par un "f" sont des fichiers.

3
unwind