Linux

如果文件夾的總大小超過 10G,則刪除文件夾中最舊的文件

  • September 17, 2021

以下語法將刪除文件hive夾下的文件:

/usr/bin/find /var/log/hive -type f -print -delete

我正在嘗試執行以下操作:

/var/log/hive僅當文件夾大小超過10G時才刪除最舊的文件

注意 - 當 hive 文件夾下的大小正好為 10G 時,刪除過程將停止,因此如果大小大於 10G,則清除過程將開始

我們可以使用 find 命令或其他方法創建此解決方案嗎?

在 GNU 系統上,您可以執行以下操作:

cd /var/log/hive &&
 find . -type f -printf '%T@ %b :%p\0' |
   sort -zrn |
   gawk -v RS='\0' -v ORS='\0' '
     BEGIN {max = 10 * 1024 * 1024 * 1024} # 10GiB; use max=10e9 for 10GB
     {du += 512 * $2}
     du > max {
       sub("[^:]*:", ""); print
     }' | xargs -r0 echo rm -f

即按上次修改時間(從最新到最舊)對正常文件進行排序,然後計算它們的累積磁碟使用量(這裡假設沒有硬連結)並在我們超過 10GiB 門檻值時刪除每個文件。

請注意,它沒有考慮目錄文件本身的大小。它只考慮正常文件的磁碟使用情況。

echo對結果滿意時刪除。

一行:

find . -type f -printf '%T@ %b :%p\0' |sort -zrn|gawk -vRS='\0' -vORS='\0' '{du+=512*$2};du>10*(2^30){sub("[^:]*:","");print}'|xargs -r0 echo rm -f

要在所有正常文件的累積磁碟使用量超過 10GiB 時僅刪除 *.wsp 文件,您需要首先列出非 wsp 文件。同時,我們還可以考慮我們之前失去的目錄和其他非正常文件的磁碟使用情況:

cd /var/log/hive &&
 find . \( -type f -name '*.wsp' -printf WSP -o -printf OTHER \) \
    -printf ' %T@ %b :%p\0' |
   sort -zk 1,1 -k2,2rn |
   gawk -v RS='\0' -v ORS='\0' '
     BEGIN {max = 10 * 1024 * 1024 * 1024} # 10 GiB
     {du += 512 * $3}
     du > max && $1 == "WSP" {
       sub("[^:]*:", ""); print
     }' | xargs -r0 echo rm -f

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