我沒有在Bash中每天編碼。我試圖實現小功能:用戶在find命令中定義要省略的目錄或文件數組。不幸的是,我在shell中擴展星號和其他元字符時遇到了問題(*在連接時被擴展)。我的代碼是:不擴展星號的shell - 不包括髮現的路徑
excluded=("subdirectory/a/*"
"subdirectory/b/*"
)
cnt=0
for i in "${excluded[@]}"; do
directories="$directories ! -path \"./${excluded[$cnt]}\""
cnt=$(($cnt+1))
done
echo "$directories"
for i in $(find . -type f -name "*.txt" $directories); do
new_path=$(echo "$i"|sed "s/\.\//..\/up\//g")
echo $new_path
done
不幸的是,我仍然在結果中看到排除的目錄。
編輯:
這不是重複現有的問題。我不問你如何排除find中的目錄。通過傳遞變量來查找命令,擴展元字符(如「*」)時遇到問題。下面E.g我幾乎工作液:
excluded=("subdirectory/a/*"
"subdirectory/b/*"
)
cnt=0
for i in "${excluded[@]}"; do
directories="$directories ! -path ./${excluded[$cnt]}"
cnt=$(($cnt+1))
done
echo "$directories"
for i in $(find . -type f -name "*.txt" $directories); do
new_path=$(echo "$i"|sed "s/\.\//..\/up\//g")
echo $new_path
done
它的工作原理,但問題是,當e.g目錄c包含多個文件。在這種情況下,星號被完整文件路徑替代。因此我有一個錯誤:
find: paths must precede expression: ./subdirectory/c/fgo.txt
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
爲什麼?因爲星號sgin已經擴展到完整的文件名:
! -path ./subdirectory/a/aaa.txt ! -path ./subdirectory/b/dfdji.txt ! -path ./subdirectory/c/asd.txt ./subdirectory/c/fgo.txt
我的問題是:如何避免這種情況呢?
[可從find中排除目錄。命令](http://stackoverflow.com/questions/4210042/exclude-directory-from-find-command) – ffledgling
不是。我詢問避免星號擴展,而不是查找語法 - 請參閱我的編輯 – Viper