in meinem manpage Es gibt nichts über das Format des -ls
Parameter ändern. Tatsächlich wird die Ausgabe von -ls
auf meinem System nicht von verschiedenen Umgebungsvariablen beeinflusst, die sich auf die Ausgabe des Befehls ls
selbst auswirken. Ich nehme an, dass das Format des -ls
Parameters intern find
ist und nicht den tatsächlichen ls
Befehl enthält. Für mich ist das Programmieren sinnvoll. Warum einen externen Befehl ausführen? Simulieren Sie einfach die Anzeige.
Die einzige Möglichkeit, um dies zu umgehen, ist -exec
oder -print0
zu verwenden, um die Ergebnisse an den tatsächlichen ls
Befehl übergeben. Ein wenig Warnung: Wenn Sie den Namen des Verzeichnisses übergeben, wird ls
den Inhalt dieses Verzeichnisses drucken, so müssen Sie -d
an den Befehl ls
übergeben oder -type f
in Ihre find
Abfrage hinzufügen. Ich habe die Hilfeseite finden auf Linux, und stellte fest, dass es die gleiche Leistung sein annimmt als , so I used that. Since
-d is included, I didn't have to add
Typ -f` meiner Entdeckung Abfrage -dils:
Dies wird die -exec
mit der jeder sendet Datei oder Verzeichnis einzeln zum Befehl ls
. Wenn Sie 10.000 Dateien haben, wird ls
10.000 Mal aufgerufen.
$ find /directory -xdev -exec ls -dils --time-style=long-iso {} \;
Dies vielleicht effizienter:
$ find /directory -xdev -print0 | xargs -0 ls -dils --time-style=long-iso
Dies wird Gruppe so viele Dateinamen wie möglich, die in den Befehlspuffer passen und sie sofort Befehl an die ls
passieren. Es wird den Befehl ls
so oft wie erforderlich aufrufen, um alle Dateien zu vervollständigen. Wenn Sie beispielsweise 10.000 Dateien in Ihrem find
-Befehl haben, wird der Befehl ls
möglicherweise ein- oder zweimal anstelle von 10.000 Mal aufgerufen.
Das Problem ist, dass xargs
Probleme mit lustigen Dateinamen hat, und es gibt ein paar Sicherheitsaspekte, wie in der manpage wies darauf hin:
Es ist nicht möglich, xargs sicher verwendet werden, da es immer Eine Zeitlücke zwischen der Erstellung der Liste der Eingabedateien und ihrer Verwendung in den Befehlen, die XARGS ausgibt. Wenn andere Benutzer Zugriff auf das System haben, können sie das Dateisystem während dieses Zeitfensters manipulieren, um die Aktion der Befehle zu erzwingen, die xargs runs für nicht beabsichtigte Dateien anwenden.Für eine ausführlichere Erörterung dieser und damit zusammenhängender Probleme lesen Sie bitte das Kapitel "Sicherheitsüberlegungen" in den Textinfo-Dokumenten von findutils. Die Option -execdir von find kann oft als eine sicherere Alternative verwendet werden.
Der -print0
Parameter verwendet ein NUL
Zeichen Dateinamen zu trennen anstelle ein NL
und die -0
Parameter teilen xargs
die NUL
Zeichen als Dateinamen Separator zu verwenden, anstatt Leerzeichen (die Zeichen in der $IFS
Umgebung Variable).
Dies bedeutet, funktioniert fast die ganze Zeit, aber Sie können immer noch entscheiden, dass -exec ls
ist ein besserer Weg zu gehen.
Xargs hat keine Probleme mit "lustige Dateinamen", wenn mit -0 verwendet. Eine andere Möglichkeit, ls effizient zu verwenden, ist die Verwendung von -exec ... +. In Bezug auf die Sicherheit macht der oben zitierte Punkt nur einen Unterschied, ob es sicherheitsrelevante Auswirkungen darauf gibt, ob und wie eine Datei in der Ausgabe von -ls oder ls auftaucht. –