wake-up-neo.com

Rekursiv Alle Verzeichnisse und Dateien auflisten

Ich möchte die folgende Ausgabe erhalten.

Angenommen, die Verzeichnisstruktur im Dateisystem sieht folgendermaßen aus:

 -dir1 
 -dir2 
 -Datei1 
 -Datei2 
 -dir3 
 -Datei3 
 -Datei4 
 -dir4 
 -file5 
 -dir5 
 -dir6 
 -dir7 

Die Ausgabe des Skripts muss wie folgt aussehen:

Verzeichnisse:

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

Dateien:

/dir1 
/dir1/dir2/file1 
/dir1/dir2/file2 
/dir1/dir2/dir3/file3 
/dir1/Verzeichnis2/Verzeichnis3/Datei4 
/Verzeichnis1/Verzeichnis2/Verzeichnis4/Datei5 
/Verzeichnis1/Verzeichnis5/Verzeichnis6 
/Verzeichnis1/Verzeichnis5/Verzeichnis7 

Können Sie mir sagen, wie ich die Ausgabe von find . -type d und find . -type f in eine andere Datei?

43
Christopher

In Windows, um nur Verzeichnisse aufzulisten:

dir /ad /b /s

um alle Dateien (und keine Verzeichnisse) aufzulisten:

dir /a-d /b /s

die Ausgabe in eine Datei umleiten:

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

dir befehlsparameter auf wikipedia erklärt

84
Andrea Bertani

in Shell:

find . -type d

gibt Verzeichnisse aus dem aktuellen Arbeitsverzeichnis an und:

find . -type f

gibt Dateien aus dem aktuellen Arbeitsverzeichnis aus.

Ersetzen Sie . Durch Ihr Verzeichnis von Interesse.

22
mouviciel

Bash/Linux Shell

Verzeichnisse:

find ./ -type d 

Dateien:

find ./ -type f 

Bash/Shell In eine Datei

Verzeichnisse:

find ./ -type d  > somefile.txt

Dateien:

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

Unter Windows ist dies die flexibelste Lösung, mit der Sie zusätzlich Verzeichnisnamen verarbeiten können.

Sie verwenden FOR/R, um Stapelbefehle rekursiv auszuführen.

Checken Sie diese Batch-Datei aus.

@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!
)

Ähnlich wie bei Dateien können Sie in Ihrem Fall Muster als Satz anstelle von Punkt hinzufügen

 (*.*)
7
majkinetor

Dies ist eine alte Frage, aber ich dachte, ich würde sowieso etwas hinzufügen.

DIR durchläuft nicht alle gewünschten Verzeichnisbäume, insbesondere nicht die in C :. Es gibt einfach an Orten wegen unterschiedlicher Schutzmaßnahmen auf.

ATTRIB funktioniert viel besser, weil es mehr findet. (Warum dieser Unterschied? Warum sollte MS dafür sorgen, dass ein Dienstprogramm auf die eine und ein anderes Weise funktioniert? Verdammt, wenn ich das weiß.) Nach meiner Erfahrung besteht der effektivste Weg, dies zu handhaben, darin, zwei Auflistungen zu erhalten:

attrib/s/d C: \>% TEMP%\C-mit-Verzeichnissen.txt

attrib/s C: \>% TEMP%\C-without-directory.txt

und den Unterschied zwischen ihnen bekommen. Dieser Unterschied besteht in den Verzeichnissen auf C: (mit Ausnahme der zu gut ausgeblendeten). Bei C: würde ich dies normalerweise als Administrator ausführen.

3
djc

In Windows:

dir/ad/b/s

dir/a-d/b/s

3
Peter

In Linux ein einfaches

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

sie erhalten eine Liste aller enthaltenen Elemente mit gemischten Verzeichnissen und Dateien. Sie können diese Ausgabe in einer temporären Datei speichern und dann alle Zeilen extrahieren, die mit 'd' beginnen. Das werden die Verzeichnisse sein. Zeilen, die mit einem 'f' beginnen, sind Dateien.

3
unwind