2

我想在命令替换中使用 find ,其中返回的文件名包含空格。我需要什么选项才能正确引用文件名?我试过-print0了,但它在 shell 本身中不起作用。

例子:

command $(find . -type f) some other params

我也尝试过-exec echo "{}" \;,但这也无济于事。


如果我set -x用来显示 shell 扩展和执行的实际命令,我会得到:

$ command `find -type f -printf \"%p\"\ ` some other params
++ find -type f -printf '"%p" '
+ command '"./file_with' 'blanks"' '"./another' 'file"' some other params

单引号从何而来,为什么要应用于每个“单词”?

4

3 回答 3

3

查找结果放入数组中,然后运行command "${array[@]}" some other params

于 2012-02-09T15:58:57.577 回答
0

也许该printf动作更适合包含在替换中(find尽管仅限 GNU):

command $(find . -type f -printf \"%P\"\ ) some other params

%P占位符是文件名减去 的参数,find因此在除 之外的情况下find .,您可能需要%p

于 2012-02-09T16:00:29.693 回答
-2
find /what/ever -name "what ever" -exec echo "\{\}" \;

在这里工作(Ubuntu 10.04 默认 gterm 与 bash)

刚试过

find /bin -name ls -exec \{\} -lah \;
`find /bin -name ls -exec echo \{\} \;` -lah
MYCMD=`find /bin -name ls -exec echo \{\} \;` && $MYCMD -lah
MYCMD=$(`find /bin -name ls -exec echo \{\} \;` -lah)  && echo $MYCMD
MYCMD=$(`find /bin -name ls` -lah)  && echo $MYCMD

所有工作都按预期进行

于 2012-02-09T15:37:00.183 回答