簡體   English   中英

Linux shell腳本用於計算文件並在超過數字時刪除

[英]Linux shell script to count files and delete when they exceed a number

我想運行一個cron作業,當它超過一個數字時刪除目錄中的所有文件。

例如,當它變為1000個文件時,則刪除該目錄中的所有文件。

目標是清除緩存目錄。

#!/bin/bash
CACHE_DIR=/home/cache
if [[ `ls -al $CACHE_DIR | wc -l` -ge 1000 ]] ; then 
     find $CACHE_DIR -t file -exec rm -f {} \; 
fi;

如果文件數等於且大於1000,則刪除/ home / cache中的所有常規文件。

再次, xargs救援!

(echo ; ls -1 ) | head -n -1000 | head -n 1 | xargs -r rm -f *

第一部分創建目錄中所有文件的列表,但前面有一個空行

第二,保留除最后1000行之外的所有行。 如果少於1000個文件,什么都不保留!

第三,只保留第一行 - 這是空行或沒有(如果少於1000個文件)

最后,如果至少有一行輸入(這是-r選項),則運行命令rm -f * ONLY

編輯:

好吧,顯然*在腳本中不起作用。 因此,使用fedorqui的想法,您可以使用:

(echo ; ls -1 ) | head -n -1000 | head -n 1 | xargs -r ls -1 | xargs rm -f

因此,只有當文件超過1000個(並將輸出轉換為rm )時,才會執行ls -1而不是執行rm -f *

典型的最近最少使用(LRU)緩存不是刪除所有文件,而是刪除最近未使用的舊條目並保留最近使用的條目。

ls -ut1 | tail -n+1001 | xargs -n 50 rm 

這將按照訪問時間對dir中的所有文件進行排序,最近最少訪問底部。 尾部省略了前1000並將其余部分發送到刪除了em的'xargs rm'。 如果文件名很長並且導致單個命令長度超過ARG_MAX,則可能需要xargs的“-n 50”選項。

如果文件少於1000個,那么'xargs rm'會抱怨。 清除它;

ls -ut1 | tail -n+1001 > /tmp/files$$
if [[ `cat /tmp/files$$ | wc -l` -ge 1001 ]] ; then
  while read line ; do
    rm "$line"
  done < /tmp/files$$
fi
rm /tmp/file$$

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM