grep/list bash 遞歸

grep/list bash 遞歸
parts = grep "/root/backups/*"

for part in $parts
do
    echo $part
    rm -rf $part #delete
done

我基本上需要遍歷資料夾並使用 Bash 腳本返回資料夾中的每個項目。

無法透過 grep 工作,儘管這可能是一種更簡單的方法。第一行是純粹的偽無線索程式碼。

答案1

這可以輕鬆完成,無需循環。

如果您只想刪除這些文件,只需使用 rm:

$ rm -rf /root/backups/*

如果您想在刪除檔案時顯示檔案名,請使用 find 代替:

$ find /root/backups -maxdepth 1 -mindepth 1 -print -exec rm -rf {} \;

-maxdepth 選項告訴 find 從起始點 /root/backups 下降不要超過一級。 -mindepth 選項告訴 find 從哪裡開始回傳結果,有效地告訴 find 忽略起始點。 -print 選項只是將找到的檔案列印到螢幕上。使用 -exec 時,{} 將替換為找到的文件,因此呼叫 rm 來刪除它們。

編輯:消除了每個評論不必要的 -exec

答案2

將 grep 指令更改為:

for i in ``ls -bRC1 /path/* ;回顯 $i ; rm $i ;完畢

-b 將轉義空格和其他字符,這些字符可能會導致 rm 出現錯誤和意外後果。 -R 是遞迴的。 -C1 是單列(可能是多餘的)。我會重新考慮 -rf

您可能會想要使用 find 而不是 for 迴圈

find /path -H -maxdepth 3 -type f -mtime +7 -exec rm {} \; -ls

如果您不知道上述選項的含義,請輸入man find

答案3

grep -l 只會給你檔名

零件= grep -rl ....

答案4

您需要給定目錄中的檔案名稱清單。有一個程式可以做到這一點,但你會不好意思讀到它的名字:ls。這就是它的全部作用!您想要一個包含子目錄中的檔案的遞歸列表,因此請使用ls -R.您可以將其輸出放入腳本中的變數中,並按照您的意願使用它。

相關內容