Bash 腳本刪除最舊的文件但保留最新的文件,包括子目錄

Bash 腳本刪除最舊的文件但保留最新的文件,包括子目錄

我正在嘗試刪除舊文件,但應保留最近 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 文件之外的所有文件

相關內容