![](/img/trans.png)
[英]Shell Script for Delete all files in directory and print count of deleted files
[英]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.