周围有任何“find -exec”专家吗?
我有一个需要发送文件的文件夹sendmail
(当发生不好的事情时,它们就会出现在那里)。
命令
find . -type f -exec sendmail -t < {} \;
给我
-bash: {}: No such file or directory
它好像不太喜欢
<
。和这个
find . type -f -exec cat {} |sendmail -t \;
给我
find: missing argument to `-exec'
它好像不太喜欢
|
。
怎么了?
答案1
看起来您希望此重定向 ( <
) 或管道 ( |
) 属于-exec … ;
语句内部。这行不通,因为它们在find
运行之前就由您的 shell 处理了。
为了使它们工作你需要其他shell 内部-exec … ;
。另一个 shell 将处理<
或|
。分别:
find . -type f -exec sh -c 'sendmail -t < "$1"' sh {} \;
find . -type f -exec sh -c 'cat "$1" | sendmail -t' sh {} \;
注意:find . -type f -exec sh -c 'sendmail -t < "{}"' \;
不太复杂,但错误。解释如下:可以find -exec sh -c
安全使用吗?
答案2
在这两种情况下,您的重定向都是由 shell 而不是 解析的find
,因此您需要对其进行转义:
find . -type f -exec sendmail -f \< {} \;
按预期工作。