Format des Stat-Befehls, um '/' an den Dateinamen anzuhängen, wenn es sich um ein Verzeichnis handelt, und "./" am Anfang zu entfernen

Format des Stat-Befehls, um '/' an den Dateinamen anzuhängen, wenn es sich um ein Verzeichnis handelt, und "./" am Anfang zu entfernen

Mit dem folgenden Befehl konnte ich alle Verzeichnisse relativ zum aktuellen Verzeichnis zusammen mit der Epochenzeit der letzten Änderung auflisten:

find . -exec stat -c '%n: %Y' {} \;

Die Ausgabe sieht ungefähr so ​​aus:

.: 1569247414
./a_file.txt: 1561624333
./some_folder: 1561624645
./some_folder/some_file.txt: 1561624645
./some_folder/another_file.txt: 1536557809

Wie kann ich das "./" am Anfang jedes Eintrags entfernen und ein '/' hinzufügen, wenn es sich um ein Verzeichnis handelt?

Als Bonus wäre es schön, den ersten Eintrag „.“ zu entfernen, der nur den aktuellen Ordner angibt.

Prost

Antwort1

  • Hinzufügen -mindepth 1, um loszuwerden, .was Tiefe==0 ist
  • Alternative: Verwenden Sie find *anstelle vonfind .
  • Dateien aus Ordnern trennen mit-type d ... -or -type f ...
  • Verwenden Sie +anstelle von , \;um mehrere Dateien an zu senden stat; es kann damit umgehen und ist viel schneller!

find * \
-type d -exec stat -c '%n/: %Y' {} + \
-or -type f -exec stat -c '%n: %Y' {} +

ABER...

Das brauchst du -exec statüberhaupt nicht!

  • Verwenden Sie finds Bultin, -printfum das letzte Änderungsdatum auszudrucken ( %Csentspricht stat's %Y).
  • -printf '%P'anstelle von können Sie auch am Anfang jedes Dateinamens %pentfernen ../

find . -mindepth 1 \
-type d -printf '%P/: %Cs\n' \
-or -type f -printf '%P: %Cs\n'

Ausgabe:

a_file.txt: 1561624333
some_folder/: 1561624645
some_folder/some_file.txt: 1561624645
some_folder/another_file.txt: 1536557809

verwandte Informationen