给出一个包含文件的目录$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
为什么?
答案 0 :(得分:3)
由于您将变量括在双引号中,因此整个字符串将作为find
之后的单个标记发送到-exec
,find
将其视为命令的名称。要解决此问题,只需删除变量周围的双引号:
find "$HOME/foo" -type f -exec $md5 {} \;
通常,将命令存储在shell变量中并不好。请参阅BashFAQ/050。
答案 1 :(得分:3)
使用数组。
md5Cmd=(md5deep -bre)
find "$HOME/foo" -type f -exec "${md5Cmd[@]}" {} \;