Je lis ici que vous pouvez countr le nombre d'invocations de la command
dans la -exec command {} +
par la tuyauterie | wc -l
| wc -l
à la fin de celui-ci.
Bien que je -execdir
que -execdir
est différent, pour chaque sous-directory correspondant -execdir
, il exécute une invocation de la command
depuis le sous-directory dans lequel il se trouve, si j'ai plus d'un file qui correspond à un sous- -directory, ne devrais-je pas me refind avec le nombre d'invocations égal au nombre de sous-directorys correspondants, et non le nombre d'invocations correspondant au nombre de files correspondants dans ces sous-directorys?
Je me retrouve avec ce dernier quand je cours ce qui suit:
$ find . -name "bob*" -execdir echo {} + | wc -l
La page de execdir command {} +
indique que le premier doit être le cas:
Comme avec l'action
-exec
, la forme+
de-execdir
va build une command line pour traiter plus d'un file correspondant, mais une invocation decommand
donnée ne-execdir
que les files qui existent dans le même sous-directory.
c'est à dire
Je suis en train:
./file1inDir1 ./file2inDir1 ./file3InDir2 ./file4InDir3
Quand j'attends ceci, basé sur la page de manuel:
./file1inDir1 ./file2inDir1 ./file3InDir2 ./file4InDir3
Ceci est un problème de performance de find
. Dans la version 4.3.4 de findutils
, une solution de contournement devait restreindre le nombre d'arguments que -execdir ... {} +
utilisera pour 1. Dans la version 4.5.9, la limite a été supprimée.
Voir un exemple:
$ mkdir -p dir{1..3} $ touch dir{1..3}/file1 dir2/file{1..3} $ find . ./dir1 ./dir1/file1 ./dir2 ./dir2/file1 ./dir2/file2 ./dir2/file3 ./dir3 ./dir3/file1
Avec -execdir {} +
, la command doit être exécutée 3 fois. La deuxième invocation devrait avoir 3 arguments.
Avec find
4.4.2:
$ find-4.4.2 . -name "file*" -execdir sh -c 'echo "Executing $@ in $(pwd)"' find-sh {} + Executing ./file1 in /path/to/dir1 Executing ./file1 in /path/to/dir2 Executing ./file2 in /path/to/dir2 Executing ./file3 in /path/to/dir2 Executing ./file1 in /path/to/dir3
Avec find
4.6.0:
$ find-4.6.0 . -name "file*" -execdir sh -c 'echo "Executing $@ in $(pwd)"' find-sh {} + Executing ./file1 in /path/to/dir1 Executing ./file1 ./file2 ./file3 in /path/to/dir2 Executing ./file1 in /path/to/dir3