Wie listet man mit „Find“ alle Dateien auf einer Festplatte auf?

Wie listet man mit „Find“ alle Dateien auf einer Festplatte auf?

Ich möchte alle Dateien auf der Festplatte auflisten, einschließlich Größe, Datum der letzten Änderung und absolutem Pfad.

Ideenformat:

[file size] [last modified date] [absolute path] [ filename] 

Ich habe es versucht:

ls -lhR | awk -v PWD=$PWD '{printf("%4s %4s %2s %5s %s/%s\n", $5, $6, $7, $8, PWD, $9); }' >> /tmp/report.list 

Es hat perfekt funktioniert, bis es auf einige Dateien/Verzeichnisse mit Leerzeichen dazwischen gestoßen ist.... Also habe ich Folgendes versucht:

find . -name "*" -exec du -sh {} \; -exec date -r {} \; -exec echo " " \; >> /tmp/report.list

Allerdings scheint die Ausgabe auf drei statt zwei Zeilen verteilt zu sein und außerdem ist der ausgegebene Pfad nicht der absolute Pfad zur Datei.

Was soll ich machen?

Antwort1

Sie können finddie Aktion von verwenden -printf, um diese Attribute direkt auszugeben, z. B.

find "$PWD" -printf '%s\t%Tx\t%h\t%P\n'
  • %s: Dateigröße in Bytes.
  • %Tx: Zeitpunkt der letzten Änderung der Datei in der Datumsdarstellung des Gebietsschemas
  • %h: Führende Verzeichnisse des Dateinamens
  • %P: Der Dateiname wurde entfernt, wobei der Name des Befehlszeilenarguments, unter dem sie gefunden wurde, entfernt wurde.

Der Verzeichnispfad ( %h) wird relativ zum Befehlszeilenargument „Pfad“ gedruckt, mit dem der findBefehl aufgerufen wird: Durch die Angabe des Arbeitsverzeichnisses mit $PWDwird es absolut.

Antwort2

Sie können die Option in der Suche verwenden -printf:

find / -type "f" -printf "%s\t%TY-%Tm-%Td\t%p\n" > file.txt

Dadurch wird eine Datei im Format:

[Größe in Bytes]TAB[Zuletzt geändertes Datum im Format JJJJ-mm-tt]TAB[FULLPATH]

Es wird auf der vollständigen Dateistruktur ausgeführt.

Ersetzen Sie jedes \tdurch ein Leerzeichen, wenn Sie es nicht durch Tabulatoren getrennt haben möchten. Mit man findkönnen Sie andere Formatierungsoptionen für die -printfOption in finden find.

verwandte Informationen