Je viens d'essayer:
find . -name "*.[hc]" -print
et
find . -name "*.[hc]"
Mais les deux sorties identiques, est -print
inutile maintenant?
En regardant la page de manuel sous FreeBSD, je vois:
-print This primary always evaluates to true. It prints the pathname of
the current file to standard output. If none of -exec, -ls,
-print0, or -ok is specified, the given expression shall be
effectively replaced by ( given expression ) -print.
Donc, dans de nombreux cas, -print
est inutile. Cependant, considérons cette expression qui recherche un fichier nommé à l' foo
intérieur de somedir
, mais pas à l'intérieur d'un répertoire nommé .snapshot
:
find somedir -name .snapshot -prune -o -name foo
Compte tenu de la description référencée ci-dessus, cela sera transformé en:
find somedir ( -name .snapshot -prune -o -name foo ) -print
Ce qui n'est pas le même que ce qui était probablement prévu:
find somedir -name .snapshot -prune -o -name foo -print
Ajouter des parenthèses pour rendre le groupe un peu plus évident, c'est:
find somedir ( -name .snapshot -prune ) -o ( -name foo -print )
Pour repérer la différence, remarquez-le -prune
et -print
évaluez-le true
. Donc, sans spécifier -print
, la première version imprimera le fichier actuel s'il correspond ou non .-name .snapshot
-name foo
La deuxième version ne sortira le fichier actuel que si elle -name foo
correspond.
C’est une façon longue de dire que cela -print
n’est généralement pas nécessaire tant que vous comprenez les situations dans lesquelles cela est nécessaire.
This primary always evaluates to true
?find
est un énorme évaluateur d’expression logique, et certains de ses prédicats ont des effets secondaires et renvoient une valeur booléenne.find
un tas d'expressions booléennes - comme-name foo
, qui sont évaluées à True lorsqu'un fichier est nomméfoo
. Les expressions aiment-print
ou-prune
ne spécifient pas vraiment une condition, elles sont donc toujours évaluées sur True.-print
car ils sont toujours évaluéstrue
, n'est-ce pas en double?C'est également utile lorsque vous faites d'autres choses, mais que vous voulez tout de même voir les correspondances.
Ceci est un appel de script commun pour moi:
la source