
我正在嘗試刪除舊文件,但應保留最近 3 天的日誌文件。
ls -tr /home/httpd/htdocs/路徑名稱/路徑名稱/config//建置/日誌/應用程式/.log |尾-n +4 | xargs rm --
但它被刪除了,所有檔案只保留一個資料夾中的 3 個檔案。
誰能幫我解決這個問題。
答案1
你可以嘗試一下,將以下內容放入shell腳本檔案中並執行。
#!/bin/bash
dirs=($(find /tmp/test -type d))
for dir in "${dirs[@]}"; do
cd "$dir"
ls -pt | grep -v / | tail -n +4 | xargs rm -f
done
替換/tmp/test
為您的目錄名稱。
答案2
你可以使用這個指令:
ls -t path | sed -e '1,3d' | xargs -d '\n' rm
或在循環中:
for d in $(find path -type d); do
ls -t "$d" | sed -e '1,3d' | xargs -d '\n' rm
done
在哪裡:
ls -t
:依修改時間降序列出文件,每行一個檔名。sed -e '1,3d'
: 刪除前3行xargs -d '\n' rm
:對於每個輸入行(沒有終止換行符),將其作為參數傳遞給rm
.-d '\n'
:這是為了提高效率所必需的,以使 xargs 將每個輸入行視為單獨的參數,但同時傳遞命令列上適合的盡可能多的參數,因此不會為每個輸入重新調用 rm 。
更多的可能性,請參閱帖子 刪除 bash 中除最新 X 文件之外的所有文件。