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 find
die 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 find
Befehl aufgerufen wird: Durch die Angabe des Arbeitsverzeichnisses mit $PWD
wird 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 \t
durch ein Leerzeichen, wenn Sie es nicht durch Tabulatoren getrennt haben möchten. Mit man find
können Sie andere Formatierungsoptionen für die -printf
Option in finden find
.