将命令传递给' find -exec'通过变量不起作用

时间:2017-07-26 02:38:06

标签: bash unix

给出一个包含文件的目录$HOME/foo/

命令:

find $HOME/foo -type f -exec md5deep -bre {} \;

工作正常并散列文件。

但是,为-exec创建变量似乎不起作用:

md5="md5deep -bre"

find $HOME/foo -type f -exec "$md5" {} \;

返回:find: md5deep -bre: No such file or directory

为什么?

2 个答案:

答案 0 :(得分:3)

由于您将变量括在双引号中,因此整个字符串将作为find之后的单个标记发送到-execfind将其视为命令的名称。要解决此问题,只需删除变量周围的双引号:

find "$HOME/foo" -type f -exec $md5 {} \;

通常,将命令存储在shell变量中并不好。请参阅BashFAQ/050

答案 1 :(得分:3)

使用数组。

md5Cmd=(md5deep -bre)

find "$HOME/foo" -type f -exec "${md5Cmd[@]}" {} \;