web-dev-qa-db-fra.com

Quelle est la différence entre trouver. et trouve . -imprimer

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
28
faressoft

Du findutils - find manage :

Si aucune expression n'est donnée, l'expression -print est utilisé (mais vous devriez probablement envisager d'utiliser -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:

-print

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. Consultez la section des noms de fichiers inhabituels pour plus d'informations sur la manière dont les caractères inhabituels des noms de fichiers sont manipulés.

41
Stephen Kitt

-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.

21
Stéphane Chazelas

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

8
cuonglm

À 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.

4
YoMismo

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.

3
Kevin