Linux: So zeigen Sie die Berechtigung von Dateien an (wie ls -l) für Dateien, die vom Befehl „find“ zurückgegeben werden

Linux: So zeigen Sie die Berechtigung von Dateien an (wie ls -l) für Dateien, die vom Befehl „find“ zurückgegeben werden

Ich führe einen Suchbefehl aus, um mir die Dateien einer bestimmten Erweiterung anzuzeigen, etwa:

find $directory -type f -name "*.vm"

Ich möchte jedoch auch die Dateiberechtigungen sehen können (wie ls -l zeigt).

Wie kann das erreicht werden?

Antwort1

GNU findverfügt über eine -lsDirektive, die Sie verwenden können. Sie verfügt über ein Ausgabeformat, das dem von sehr ähnlich ist, aber nicht genau mit diesem übereinstimmt ls -l.

Die Standardaktion von find, wenn keine angegeben ist, ist, -printdass einfach der gefundene Dateiname und Pfad ausgedruckt werden. Wenn Sie hinzufügen (oder -printdurch ersetzen), -lserhalten Sie eine ausführlichere Auflistung.

Wenn Sie aus irgendeinem Grund ein bestimmtes Format wünschen, -printfist dies das, was Sie möchten. Versuchen Sie beispielsweise Folgendes:

find . -printf "%M %n %8.8u %8.8g %8.8s %Ax %AX %p\n"

um das Ausgabeformat ungefähr zu replizieren ls -l. (Dabei wird eine andere Datumsformatierung verwendet; möglicherweise lässt sich das Verhalten von ls dort auch replizieren; findEinzelheiten zu den verfügbaren Formatierungsbezeichnern und printf(3)zu den Funktionen der Zahlen finden Sie auf der Manpage.)

Im Allgemeinen möchten Sievermeidenwenn Sie können, und wenn Sie -exec verwenden -execmüssen,wollenzu verwenden, +anstatt {}mehrere Dateinamen in einem einzigen Aufruf anzugeben. Andernfalls wird der Befehl einmal pro Datei ausgeführt, die den Kriterien entspricht, was bei einer großen Anzahl von Dateien zu erheblichen Leistungseinbußen führen kann.

Beachten Sie auch, dass die einfachste Lösung darin bestehen könnte, von vornherein ls zu verwenden, wenn Sie das Rekursionsverhalten nicht benötigen:ls -ld $directory/*.vm

Antwort2

Sie können die -lsOption auf angeben find. Oder, wenn Sie ein bestimmtes Format benötigen, verwenden Sie -exec:

find "$directory" -type f -name '*.vm'  -exec ls -l {} \;

verwandte Informationen