Aus der findutils
find
Manpage :
Wenn kein Ausdruck angegeben wird, wird der Ausdruck -print
verwendet (aber Sie sollten wahrscheinlich -print0
trotzdem in Betracht ziehen, stattdessen zu verwenden).
( -print
Ist ein find
Ausdruck.)
Die POSIX-Dokumentation bestätigt dies:
Ist kein Ausdruck vorhanden, wird -print als Ausdruck verwendet.
Ist find .
also genau gleichbedeutend mit find . -print
; Der erste hat keinen Ausdruck, -print
wird also intern hinzugefügt.
Die Erklärung dazu finden Sie -print
weiter unten auf der Hilfeseite:
-print
Wahr; Drucken Sie den vollständigen Dateinamen in der Standardausgabe, gefolgt von einer neuen Zeile. Wenn Sie die Ausgabe von find in ein anderes Programm leiten und die geringste Wahrscheinlichkeit besteht, dass die gesuchten Dateien eine neue Zeile enthalten, sollten Sie ernsthaft in Betracht ziehen, die -print0
Option anstelle von zu verwenden -print
. Informationen zum Umgang mit ungewöhnlichen Zeichen in Dateinamen finden Sie im Abschnitt UNUSUAL FILENAMES.
-print
ist die Standard - Aktion . Einigefind
Prädikate werden als Aktionen im Gegensatz zu Filtern oder Bedingungen betrachtet . Zum Beispiel-type f
ist keine Aktion.-exec
ist eine Aktion, obwohl sie auch als Bedingung verwendet werden kann.Die Maßnahmen umfassen
-print
,-exec
und-ok
. Einigefind
Implementierungen haben andere Nicht-Standard - Aktion Prädikate wie die-print0
,-printf
,-execdir
,-okdir
,-ls
...Wenn keine der
<some-predicates>
enthaltenen Aktionen äquivalent ist zu:(Beachten Sie die obigen Klammern, die wichtig sind, wenn es einige
-o
Operatoren gibt).Im Zweifelsfall ist es am besten, sie
-print
explizit zu verwenden (oder-exec printf '%s\0' {} +
(oder-print0
wo verfügbar), damit die Ausgabe nachbearbeitet werden kann).Die Standardaktion
-print
wird von POSIX festgelegt. Einige altefind
Implementierungen erforderten eine explizite-print
, aber diese sind heutzutage in der Regel nicht in der Natur zu finden.Beachten Sie auch, dass bei einigen
find
Implementierungen das weggelassen werdenfiles
kann. In diesem Fall wird standardmäßig im aktuellen Verzeichnis gesucht. Das heißt für sieist äquivalent zu
Das ist aber kein Standard, also wird es am besten vermieden.
Am ausführlicheren (und nützlicheren) Ende des Spektrums
find
erlauben einige Implementierungen auch die Übergabe von Dateipfaden als Argument an eine-f
Option wie in:Sie sind die einzigen
find
Implementierungen, an die beliebige Dateipfade übergeben werden könnenfind
. Andere Implementierungen akzeptieren keine Dateipfade wie!
oder-print
... und setzen daherfind "$file" -print
(oder sogarfind -- "$file" -print
) voraus, dass$file
es sich nicht um den Namen einesfind
Prädikats (oder einer Option im ersten Fall) handelt.Leider ist das weder Standard noch portabel.
quelle
Sie sind gleich, beide schreiben die gesamte Verzeichnishierarchie aus dem aktuellen Verzeichnis heraus.
In POSIX finden Sie Dokumentation :
quelle
Unter Linux gibt es keinen Unterschied, aber andere Systeme (wie zum Beispiel AIX) benötigen ihn,
-print
wenn die Ausgabe des Befehls auf Ihrem Bildschirm angezeigt werden soll.quelle
find
benötigt es nicht. AIX ist seit Jahrzehnten POSIX-konform.Viele Jahre lang hatte der Befehl find keine Standardaktion. Ein häufiger Fehler war, zu vergessen, die Option -print zu Ihrem Suchbefehl hinzuzufügen. Ich schreibe es immer noch aus Gewohnheit.
Aber irgendwann wurde es so jetzt als Standardaktion hinzugefügt
find .
undfind . -print
sind gleichwertig.quelle
Es ist manchmal nützlich, diese Option
-print
explizit zu verwenden, wenn Sie eine andere Aktion ausführen, damit der Dateiname angezeigt wird, während diese Aktion ausgeführt wird.wäre ähnlich wie
wo
-print
entspricht-v
. Wenn Sie nicht-print
angeben, werden die Dateinamen nicht angezeigt.Um den
rm
Befehl übrigens noch ähnlicher zu gestalten, geben Sie zuerst diesen Bash-Befehl ausDadurch werden die
*
Match-Dot-Dateien (ausgeblendet).quelle