【发布时间】:2016-12-21 10:36:24
【问题描述】:
在 bash 脚本中,我尝试使用变量的内容作为 find 命令的选项:
#!/bin/bash
FILE_EXTENSIONS=( txt png jpg )
FIRST=1
for FILE_EXTENSION in ${FILE_EXTENSIONS[@]}
do
# echo "$FILE_EXTENSION"
if [[ $FIRST == 1 ]]
then
FIND_FILTER="-iname '*.$FILE_EXTENSION'"
FIRST=0
else
FIND_FILTER="${FIND_FILTER} -o -iname '*.$FILE_EXTENSION'"
fi
done
# Read and write only for user and group, ignore case '-iname'
#find . -type f "$FIND_FILTER" -exec chmod 660 {} \;
echo Find filter: $FIND_FILTER
# This might work with some already provided suggestions:
find . -type f $FIND_FILTER
# But this fails so far
find . -type f $FIND_FILTER -exec chmod 660 {} \;
#EOF
目的是设置适当的访问权限,因为某些文件(例如图片或办公文档)被标记为可执行文件。
所以实际上上面的脚本有几个文件扩展名连接的数组,但脚本显示了问题。
第一种方法是遍历最终数组并每次调用 find。但是从运行时的角度来看,一次又一次地搜索是愚蠢的。
我也可以简单地在 python 中执行此操作,但有一次我想我想在 bash 中使用 linux 基本方法来解决它。
看起来 FIND_FILTER 变量的内容是正确的(至少是使用 echo 打印的内容),但是......它不起作用。
有什么建议吗?
【问题讨论】:
标签: linux string bash find quotes