Quelle est la différence entre:
find .
et
find . -print
Que fait -print
réellement faire?
$ find .
.
./hello.txt
./hello
./hello/txt
./hello/hello2
./hello/hello2/hello3
./hello/hello2/hello3/txt
./hello/hello2/txt
$ find . -print
.
./hello.txt
./hello
./hello/txt
./hello/hello2
./hello/hello2/hello3
./hello/hello2/hello3/txt
./hello/hello2/txt
Du findutils
- find
manage :
Si aucune expression n'est donnée, l'expression
-print0
de toute façon).
(-print
est une expression find
.)
La Documentation POSIX confirme ceci:
Si non expression est présent, - Imprimer doit être utilisé comme expression.
Donc find .
est exactement équivalent à find . -print
; Le premier n'a pas d'expression alors -print
est ajouté en interne.
L'explication de ce que -print
fait plus loin dans le manuel:
Vrai; Imprimez le nom de fichier complet sur la sortie standard, suivi d'une nouvelle ligne. Si vous utilisez la sortie de la recherche d'un autre programme et que vous disposez de la possibilité la plus faible possible que les fichiers que vous recherchez puissent contenir une nouvelle ligne, vous devez envisager sérieusement d'utiliser le
-print0
option au lieu de
-print
est l'action par défaut . Certains find
prédicats sont considérés comme des actions par opposition à filtres ou conditions . Par exemple, -type f
n'est pas une action. -exec
est une action même si elle peut également être utilisée comme condition.
Les actions incluent -print
, -exec
et -ok
. Certaines find
_ Les implémentations ont d'autres prédicats d'action non standard comme le -print0
, -printf
, -execdir
, -okdir
, -ls
...
find files <some-predicates>
Où aucun de <some-predicates>
contient actions équivaut à:
find files \( <some-predicates> \) -print
(Notez les parenthèses ci-dessus qui sont importantes s'il y a quelque -o
les opérateurs).
En cas de doute, il est préférable d'utiliser -print
explicitement (ou -exec printf '%s\0' {} +
(ou -print0
si disponible) afin que la sortie puisse être post-traitée).
Le défaut -print
L'action est spécifiée par POSIX. Quelques anciens find
_ Mises en œuvre nécessitent un -print
, mais ceux-ci ne sont généralement pas trouvés dans la nature de nos jours.
Notez également que des implémentations find
permettent d'omettre le files
, auquel cas ils sont par défaut de rechercher dans le répertoire actuel. C'est-à-dire pour eux,
find
est équivalent à
find .
find . -print
Ce n'est cependant pas standard, il est donc mieux évité.
Sur l'extrémité plus verbeuse (et utile) du spectre, certaines des implémentations find
permettent également de passer des chemins de fichier en tant qu'argument à un -f
option comme dans:
find -f "$file1" -f "$file2" -print
Ce sont les seules implémentations find
qui permettent de passer des chemins de fichiers arbitraires à find
. D'autres implémentations ne peuvent accepter les chemins de fichiers comme !
ou -print
... donc find "$file" -print
(ou même find -- "$file" -print
) suppose $file
n'est pas le nom d'un find
prédicat (ou option dans le premier cas).
Malheureusement, ce n'est pas standard ni portable non plus.
Ils sont identiques, ils écrivent tous les deux la hiérarchie complète du répertoire à partir du répertoire actuel.
De POSIX Trouver la documentation :
Les commandes suivantes sont équivalentes:
trouve .
trouve . -imprimer
À Linux, il n'y a pas de différence, mais d'autres systèmes (comme Aix par exemple) ont besoin -print
Si vous souhaitez la sortie de la commande affichée sur votre écran.
Pendant de nombreuses années, la commande de trouvaille n'a pas eu d'action par défaut. Une erreur commune oublie d'ajouter l'option -Print à votre commande de recherche. Je suis toujours à ce jour le taper de l'habitude.
Mais à un moment donné, il a été ajouté comme l'action par défaut alors maintenant find .
et find . -print
sont équivalents.