Depuis la findutils
find
page de manuel :
Si aucune expression n'est donnée, l'expression -print
est utilisée (mais vous devriez probablement envisager de l'utiliser à la -print0
place, de toute façon).
( -print
est une find
expression.)
La documentation POSIX le confirme:
Si aucune expression n'est présente, -print doit être utilisé comme expression.
find .
Est donc exactement équivalent à find . -print
; le premier n'a pas d'expression et -print
est donc ajouté en interne.
L'explication de ce -print
qui se passe se trouve plus loin dans la page de manuel:
-print
Vrai; imprimer le nom de fichier complet sur la sortie standard, suivi d'une nouvelle ligne. Si vous transférez la sortie de find dans un autre programme et qu'il y a la moindre possibilité que les fichiers que vous recherchez contiennent une nouvelle ligne, alors vous devriez sérieusement envisager d'utiliser l' -print0
option à la place de -print
. Consultez la section NOMS DE FICHIERS INHABITUELS pour plus d'informations sur la façon dont les caractères inhabituels dans les noms de fichiers sont traités.
-print
est l' action par défaut . Certainsfind
prédicats sont considérés comme des actions et non comme des filtres ou des conditions . Par exemple, ce-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
. Certainesfind
mises en œuvre ont d' autres actions non standard prédicats comme le-print0
,-printf
,-execdir
,-okdir
,-ls
...Lorsqu'aucune action
<some-predicates>
contient n'est équivalente à:(notez les parenthèses ci-dessus qui sont importantes s'il y en a
-o
opérateurs).En cas de doute, le mieux est d'utiliser
-print
explicitement (ou-exec printf '%s\0' {} +
(ou-print0
si disponible) afin que la sortie puisse être post-traitée).L'
-print
action par défaut est spécifiée par POSIX. Certaines anciennesfind
implémentations nécessitaient une explicite-print
, mais celles-ci ne sont généralement pas trouvées dans la nature de nos jours.Notez également que certaines
find
implémentations permettent d'omettre lefiles
, auquel cas elles recherchent par défaut le répertoire courant. Autrement dit, pour eux,est équivalent à
Ce n'est cependant pas standard, il est donc préférable d'éviter.
À l'extrémité la plus prolixe (et utile) du spectre, certaines
find
implémentations permettent également de passer des chemins de fichier comme argument à une-f
option comme dans:Ce sont les seules
find
implémentations qui permettent de passer des chemins de fichiers arbitraires àfind
. D'autres implémentations ne peuvent pas accepter les chemins de fichiers comme!
ou-print
... doncfind "$file" -print
(ou mêmefind -- "$file" -print
) suppose que ce$file
n'est pas le nom d'unfind
prédicat (ou option dans le premier cas).Malheureusement, ce n'est pas non plus standard ni portable.
la source
Ils sont identiques, ils écrivent tous les deux la hiérarchie complète du répertoire à partir du répertoire courant.
Depuis POSIX, recherchez la documentation :
la source
Sous Linux, il n'y a pas de différence, mais d'autres systèmes (comme AIX par exemple) en ont besoin
-print
si vous voulez que la sortie de la commande s'affiche sur votre écran.la source
find
n'en a pas besoin. AIX est conforme à POSIX depuis des décennies.Pendant de nombreuses années, la commande find n'a pas eu d'action par défaut. Une erreur courante oubliait d'ajouter l'option -print à votre commande find. À ce jour, je le tape encore par habitude.
Mais à un moment donné, il a été ajouté comme action par défaut maintenant
find .
etfind . -print
est équivalent.la source
Il est parfois utile d'utiliser
-print
explicitement lorsque vous effectuez une autre action afin que le nom de fichier s'affiche lorsque cette action est effectuée.serait similaire à
où
-print
correspond à-v
. Si vous n'incluez pas-print
les noms de fichiers ne sont pas affichés.Afin de rendre la
rm
commande encore plus similaire, au fait, émettez d'abord cette commande Bashce qui rendra les
*
fichiers de points (cachés) correspondants.la source