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
.您可以將其輸出放入腳本中的變數中,並按照您的意願使用它。