Bash

使用 find 的變數不起作用

  • August 30, 2022

我需要使用 find 命令來獲取未在數組中聲明的文件。

# ALLOWED extensions
ext_allowed=("*.cs" "*.csproj" "*.sln" "*.json")

combined=""
for ext in "${ext_allowed[@]}"; do
       combined="$combined -not -name \"$ext\""
done

# This doesn't work :(
find $location $combined -not -type d

# This does work, but it looks the same??
find $location -not -name "*.cs" -not -name "*.csproj" -not -name "*.json" -not -name "*.sln" -not -type d

變數位置,只是保存文件的位置。我也已經嘗試過使用中間的 -o 選項,但這也不起作用。

誰能幫幫我?謝謝

與其製作combined字元串,不如將其製作為數組。

for ext in "${ext_allowed[@]}"; do
       combined+=($ext)
done

然後,您將需要使用參數擴展。(見https://wiki.bash-hackers.org/syntax/pe#search_and_replace

find "$location" "${combined[@]/#/'-not -name '}" -not -type d

引用自:https://unix.stackexchange.com/questions/715504