Bash

將 find 與 2 組變數一起使用

  • June 9, 2021

我希望能夠在我的 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

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