我正在嘗試編寫一個腳本,當目錄超過特定限制時,該腳本可以從目錄中刪除舊文件。這是我的劇本#!/bin/bash#incremental backup of upload folder onlyLIMIT=2TIME=`date +%b-%d-%y%s`FILENAME=backup-$TIME.tgzSRCDIR=/home/Man/blablaDESDIR=/home/Man/newdirEXCFILE=/home/Man/blabla/upif [ $LIMIT -gt 2 ]; then cd $DESDIRls -lt | grep .tgz | tail -n 1 | xargs -r rmtar -cvzf $DESDIR/$FILENAME $SRCDIR --exclude=$EXCFILE elsetar -cvzf $DESDIR/$FILENAME $SRCDIR --exclude=$EXCFILE fi但它無法正常工作,它會創建備份,但在dir超出限制后不會刪除舊文件
2 回答

慕少森
TA貢獻2019條經驗 獲得超9個贊
您的問題尚不清楚(我們只能猜測“極限”是什么意思,但我們不明白這是什么),并且缺乏動力。
在系統調用級別(請參閱syscalls(2)),將相關的系統調用依次為setrlimit(2)和signal(7)相關的調用(例如sigaction(2))。RLIMIT_FSIZE
SIGXFSZ
因此,您可以使用ulimit
內置函數和trap
一個內置函數。但是,由Shell腳本執行的程序可能會更改文件大小限制,并可能捕獲SIGXFSZ
信號。
注意,目錄的大?。ㄓ蓅tat(2)給出,因此stat(1)和ls(1))不是其文件的累積大?。ㄒ驗槟承┪募梢栽?em>多個目錄中進行硬鏈接;索引節點-參見inode(7))。它只是目錄條目的大小。
或者,您可以計算文件的累積大?。ㄊ褂胐u(1)或find(1)或gawk(1)),然后根據該文件采取一些措施,也許刪除一些大文件(但可以考慮-也許通過決定忽略它們) -在腳本執行期間寫入文件或目錄的其他進程)。
也許您可能對磁盤配額感興趣(請參閱quotactl(2),quota(1),quotacheck(8)))
您可以進行增量備份。為此,您可以使用tar(1)以外的其他實用程序(例如dar,afio,...)。注意,mv(1)&cp(1)&tar有一些--backup
選擇。也許您可能考慮使用logrotate(8)處理不斷增長的日志文件。
- 2 回答
- 0 關注
- 291 瀏覽
添加回答
舉報
0/150
提交
取消