it-swarm.com.de

Wie kann ich eine Pipe-Eingabe an den Befehl ls leiten?

Wenn ich etwas schreibe wie:

find . -name *foo* | ls -lah

es gibt dasselbe Ergebnis wie ein einfacher ls Befehl zurück, als ob es keine Eingabe hätte.

Jedoch:

ls -lah $( find . -name *foo* )

funktioniert gut, aber nur, wenn der Befehl find Ergebnisse liefert.

Ist es möglich, an ls weiterzuleiten?

20
Lasall

Sie können -exec mit dem Befehl find verwenden.

find . -name '*foo*' -exec ls -lah {} \;
25
find . -name *foo* | xargs -r ls -lah

Das sollte funktionieren.

20
freethinker

Verwenden Sie dies: (ls kann sortieren, arbeitet mit Dateinamen mit Leerzeichen oder ungewöhnlichen Zeichen)

find . -name *foo* -print0 | xargs -0 ls -lah

"-print0" bedeutet, dass Dateinamen wie file foo 1 von find gefolgt von null ausgegeben werden. Das Argument "-0" für xargs weist darauf hin, dass diese Art von Eingabe erwartet wird, sodass Dateinamen mit Leerzeichen korrekt an den Befehl ls weitergeleitet werden.

Die xargs -Konstruktion ist in gewisser Hinsicht besser als find etc -exec ls {} \;, da alle Dateinamen gleichzeitig an ls gesendet werden. Wenn Sie also alle nach Zeitstempel sortieren möchten (mit ls), so etwas funktioniert:

find . -iname *pdf -print0 | xargs -0 ls -ltr

Auf einem NetBSD-System ist "-printx" ebenfalls eine Option (dies scheint mir ein nützliches Argument zu sein, aber was auch immer, wir haben xargs -0 und es ist in Ordnung):

find . -name *foo* -printx | xargs ls -lah (nicht für Ubuntu)

3
Peter Kay

Versuche dies:

find  . -name *.bak -ls
3
Dennis