我在这里读到你可以通过管道到它的末尾来计算command
in的调用次数。-exec command {} +
| wc -l
虽然我理解这-execdir
是不同的,但对于find
发现的每个匹配子目录,它都会command
从它所包含的子目录中调用,如果我有多个文件在子目录中匹配,应该我最终得到的调用数是否等于匹配子目录的数量,而不是与这些子目录中匹配文件数匹配的调用数?
当我运行以下命令时,我最终得到了后者:
$ find . -name "bob*" -execdir echo {} + | wc -l
Run Code Online (Sandbox Code Playgroud)
手册页execdir command {} +
指出前者应该是这种情况:
与
-exec
action 一样,the 的+
形式-execdir
将构建一个命令行来处理多个匹配的文件,但任何给定的调用command
都只会列出存在于同一子目录中的文件。
IE
我越来越:
./file1inDir1
./file2inDir1
./file3InDir2
./file4InDir3
Run Code Online (Sandbox Code Playgroud)
当我期待这个时,基于手册页:
./file1inDir1 ./file2inDir1
./file3InDir2
./file4InDir3
Run Code Online (Sandbox Code Playgroud)
cha*_*aos 11
这是 的性能问题find
。在findutils
4.3.4 版中,解决方法必须-execdir ... {} +
将将使用的参数数量限制为 1。在 4.5.9 版中,该限制已被删除。
看一个例子:
$ 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
Run Code Online (Sandbox Code Playgroud)
使用-execdir {} +
,该命令应执行 3 次。第二次调用应该有 3 个参数。
使用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
Run Code Online (Sandbox Code Playgroud)
使用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
Run Code Online (Sandbox Code Playgroud)