J'ai lu ici que vous pouvez compter le nombre d'appels de command
in -exec command {} +
en canalisant | wc -l
jusqu'à la fin.
Bien que je comprenne que -execdir
c'est différent, en ce que, pour chaque sous-répertoire correspondant qui find
découvre, il exécute une invocation du command
depuis le sous-répertoire dans lequel il est contenu, si j'ai plus d'un fichier qui correspond dans un sous-répertoire, ne devrait pas 'ai-je fini avec le nombre d'appels égal au nombre de sous-répertoires correspondants, et non pas le nombre d'invocations correspondant au nombre de fichiers correspondants dans ces sous-répertoires?
Je me retrouve avec ce dernier lorsque je lance ce qui suit:
$ find . -name "bob*" -execdir echo {} + | wc -l
La page de manuel pour les execdir command {} +
états que le premier devrait être le cas:
Comme pour l'
-exec
action, la+
forme de-execdir
va construire une ligne de commande pour traiter plus d'un fichier correspondant, mais toute invocation donnée decommand
ne listera que les fichiers qui existent dans le même sous-répertoire.
c'est à dire
Je suis en train:
./file1inDir1
./file2inDir1
./file3InDir2
./file4InDir3
Quand je m'attends à cela, basé sur la page de manuel:
./file1inDir1 ./file2inDir1
./file3InDir2
./file4InDir3
echo
et que les arguments sont générés par{} +
et que vous n'avez pas de nouvelles lignes dans vos noms de fichiers (la plupart des gens n'en ont pas) ALORS le nombre de lignes est le nombre d'appels et cela fonctionne. Si le commandement est dit,head -n 999000 /dev/urandom
cela tourne horriblement mal.Réponses:
Il s'agit d'un problème de performances de
find
. Dans lafindutils
version 4.3.4, une solution de contournement a dû limiter le nombre d'arguments à-execdir ... {} +
utiliser à 1. Dans la version 4.5.9, la limite a été supprimée.Voir un exemple:
Avec
-execdir {} +
, la commande doit être exécutée 3 fois. La deuxième invocation doit avoir 3 arguments.Avec
find
4.4.2:Avec
find
4.6.0:la source