2017-07-26 98 views
1

給出了一個包含文件的目錄$HOME/foo/通過變量傳遞命令'find -exec'不起作用

命令:

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

爲什麼呢?

回答

3

因爲你是封閉的雙引號中的變量,整個字符串被以下-execfind把它當作命令的名稱發送到find作爲一個單一的令牌。要解決這個問題,只要將雙引號周圍的變量:

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

在一般情況下,這是不好的存儲在shell變量的命令。請參閱BashFAQ/050

+1

如果要減少命令長度,最好創建一個函數或腳本並將其作爲'-exec'的一部分運行。就像'find $ HOME/foo -type f -exec ./md5.sh {} \;' –

+1

@JonathaDaguerre函數不會與'-exec'一起使用,因爲它是由'find'執行的,函數只有可用在殼裏。 (但一個幫手腳本可以正常工作。) –

+0

好點@GordonDavisson!要從'-exec'運行一個函數,它需要一個新的shell調用。謝謝你糾正我。 –

3

使用數組。

md5Cmd=(md5deep -bre) 

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