如果已经回答,我很抱歉,但如果是,我找不到合适的搜索条件.
我正在尝试为find命令动态定义搜索项(基于用户定义的设置):
# reading user settings results in array of filename patterns to delete:
patterns=("*.url" "*.html")
for i in ${patterns[@]}; do
find . -iname $i -delete
done
Run Code Online (Sandbox Code Playgroud)
如果我echo是命令,结果字符串看起来是正确的,例如
find . -iname "*.url" -delete
find . -iname "*.html" -delete
Run Code Online (Sandbox Code Playgroud)
我知道我错过了一些显而易见的东西,但我尝试过的东西都没有.
如果有帮助,我正在使用Bash 4.4.5.
- - - - - - - - 编辑 - - - - - - - - -
感谢Charles Duffy和l'L'l提供正确的解决方案.我很难将数据字符串中的引号与引用的变量包围在一起,并且无法同时引用这两个变量.
获得的经验:总是引用shell变量.
l'L'l的答案很好,但是让我们find通过在一个命令行中传递所有模式只调用一次来提高效率:
patterns=("*.url" "*.html")
find_pat=( )
for i in "${patterns[@]}"; do
find_pat+=( -o -name "$i" )
done
find . -iname '(' "${find_pat[@]:1}" ')' -delete
Run Code Online (Sandbox Code Playgroud)
运行时,这将调用:
find . -iname '(' -name '*.url' -o -name '*.html' ')' -delete
Run Code Online (Sandbox Code Playgroud)
......从而删除匹配所有文件或者 *.url或者*.html在一个单一的通行证.
注意:
patterns数组),数组扩展(因此我们迭代自己而不是它们的结果),并且在扩展到findcommand(所以我们传递find文字模式语法,而不是扩展该语法的结果).-o到find_pat数组,但是然后从第二元件膨胀(阵列为0索引),从而跳过初始-o.这里使用的语法是参数扩展.| 归档时间: |
|
| 查看次数: |
1206 次 |
| 最近记录: |