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?
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
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.
Verzeichnisse:
find ./ -type d
Dateien:
find ./ -type f
Verzeichnisse:
find ./ -type d > somefile.txt
Dateien:
find ./ -type f > somefile.txt
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
(*.*)
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.
In Windows:
dir/ad/b/s
dir/a-d/b/s
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.