%20f%C3%BCr%20Dateien%2C%20die%20vom%20Befehl%20%E2%80%9Efind%E2%80%9C%20zur%C3%BCckgegeben%20werden.png)
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 find
verfügt über eine -ls
Direktive, 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, -print
dass einfach der gefundene Dateiname und Pfad ausgedruckt werden. Wenn Sie hinzufügen (oder -print
durch ersetzen), -ls
erhalten Sie eine ausführlichere Auflistung.
Wenn Sie aus irgendeinem Grund ein bestimmtes Format wünschen, -printf
ist 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; find
Einzelheiten 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 -exec
mü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 -ls
Option auf angeben find
. Oder, wenn Sie ein bestimmtes Format benötigen, verwenden Sie -exec
:
find "$directory" -type f -name '*.vm' -exec ls -l {} \;