Bash
將 find 與 2 組變數一起使用
我希望能夠在我的 bash 腳本中執行一個 find 命令,該命令將基於兩個單獨的變數查找文件。我已經做到了這一點,但我不確定如何讓最終結果發揮作用
find . -user $userid -name $filename
這是我要使用的參數文件:
cat $uidscript 10017:title 10001:options.php 10005:dump.php(235)
依此類推,變數包含使用者名和使用者名擁有的文件。
我想我需要將使用者 ID 和文件名分成兩個單獨的列表。
userid=$(cat $uidscript|cut -c1 -d':') filename=$(cat $uidscript|cut -c2 -d':')`
從這裡我不確定如何將 find 命令組織成一個
for
循環。我想它會像這樣..for i in $userid, $filename; do find . -user $userid -name $filename; done
有人可以推動我朝著正確的方向前進嗎?
使用
while-read
循環處理文件的行while IFS=: read userid filename do find . -user "$userid" -name "$filename" done < "$uidscript"
雖然其他選項都很好,但我想糾正您方法中的一些錯誤:
userid=$(cat $uidscript|cut -c1 -d':')
:
-c
獲取字元,您需要fields。使用cut -f1 -d:
.- cat 的無用用法: Just do:
cut -f1 -d: <"$uidscript"
。- 將結果儲存在一個數組中,以便您可以輕鬆地迭代它和另一個數組:
IFS=$'\n' # split on newline set -f # disable the glob part of the split+glob operator userid=($(cut -f1 -d: <"$uidscript"))
- 文件名相同。
然後您可以遍歷任一數組的索引:
for i in "${!userid[@]}" do find . -user "${userid[i]}" -name "${filename[i]}"; done