据我了解,针对指定的测试针对每个匹配文件find -tests -execdir <command> '{}' ';'
运行。command
当使用 时,该命令-execdir
在与匹配文件(对于每个匹配文件)相同的父目录中执行,代表{}
匹配文件的基本名称。
+
现在的问题是:当使用而不是同时处理多个文件时,这是如何完成的';'
?如果我使用find -tests -execdir <command> '{}' +
,所有文件都将作为参数提供给指定的命令(以不超过最大参数的方式)。 find 如何<command>
同时对所有这些执行?
答案1
假设您find
找到以下文件:
./foo/bar
./foo/baz
./foo/quux
如果您使用-execdir [...]+
,则有效的结果命令将是:
( cd ./foo; command bar baz quux )
与(有效地)相反,如果您使用-execdir [...] \;
:
( cd ./foo; command bar )
( cd ./foo; command baz )
( cd ./foo; command quux )
-exec
not 也是如此execdir
,但它会指定路径而不是更改工作目录。如果您使用-exec [...]+
,则有效的结果命令将是:
command ./foo/bar ./foo/baz ./foo/quux
与(有效地)相反,如果您使用-exec [...] \;
:
command ./foo/bar
command ./foo/baz
command ./foo/quux
让我们看看在两个目录中找到的文件的行为如何:
$ tree
.
├── bar
│ ├── bletch
│ └── freeble
└── foo
├── bar
├── baz
└── quux
$ find . -type f -exec echo {} \;
./foo/baz
./foo/quux
./foo/bar
./bar/bletch
./bar/freeble
$ find . -type f -execdir echo {} \;
./baz
./quux
./bar
./bletch
./freeble
$ find . -type f -exec echo {} +
./foo/baz ./foo/quux ./foo/bar ./bar/bletch ./bar/freeble
$ find . -type f -execdir echo {} +
./baz ./quux ./bar
./bletch ./freeble