在bash腳本我試圖用一個變量來用作find命令選項內容:如何在bash中使用變量的內容來在腳本中查找?
#!/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變量的內容是正確的(至少是什麼打印與回聲),但然後...它不起作用。
有什麼建議發生了什麼問題?
@Benoit謝謝你清理我急匆匆寫的答案。 – chepner
謝謝@chepner--拯救了我的一天。 我現在更清楚如何使用數組,並且最重要的是使用()以及需要引用它們的查找語法! – JDB