如何找到-execdir+ 工作?

如何找到-execdir+ 工作?

据我了解,针对指定的测试针对每个匹配文件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 )

-execnot 也是如此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

相关内容