您好,登錄后才能下訂單哦!
在運維工作中經常遇到要管理備份、日志等與時間戳有關的文件,例如刪除超過10天的備份/日志文件,保存最新的10個的備份/日志文件等。
“刪除超過10天的備份/日志文件”是用的比較多的一種,通常用于定時計劃任務,每次產生這些文件都是規律的時間點。
“保存最新的10個備份/日志文件”這種需求通常用在不定時的產生備份(例如每次手動執行一次產生)和日志文件(超過一定的大小則切割)。
兩種不同的需求對應不同的方法去實現,無論使用什么樣的方法都要找出所需要操作的文件或者去除不需要的文件。
Linux Bash Shell代碼 “刪除超過10天的備份/日志文件” 找出這些超過10天的文件,然后執行刪除:
function clean_old_files_older_than_day(){ save_days=10 files_ops="/data/docker/logs/myApp/" need_clean=$(find ${files_ops} -name "*.log" -mtime +${save_days} -exec ls '{}' \;) if [ ! -z ${need_clean} ]; then echo "Old logs have been found, clean old logs now. " find -L ${files_ops} -maxdepth 1 -name "*.log" -a ! -name "^." -mtime +${save_days} -exec rm -rf '{}' \; else echo "All logs are not expired, skipping. " fi }
Linux Bash Shell代碼 “保存最新的10個備份/日志文件” 找出這些除了最新的10個文件之外的文件,然后執行刪除:
function keep_some_newest_files(){ num_save=10 files_ops="/data/backup/db/mysql/" num_files=$(find ${files_ops} -type d -printf "%C@ %p\n" | sort -n | wc -l) if test ${num_files} -gt ${num_save};then echo "total number of files is $num_files." num_ops=$(expr ${num_files} - ${num_save}) echo "$num_ops files are going to be handled." list_ops=$(find ${files_ops} -type d -printf "%C@ %p\n" | sort -n | head -n${num_ops} | awk -F '[ ]+' '{print $2}') # IFS=' '$'\t'$'\n', If IFS is unset, or its value is exactly <space><tab><newline> old_IFS=$IFS IFS=" " for file_ops in ${list_ops};do echo "$file_ops" test -d ${file_ops} && rm -rf ${file_ops} done IFS="$old_IFS" else echo "total number of files is $num_files." echo "0 files are going to be handled, skipping." fi }
tag:日志文件管理,備份文件管理,find刪除文件
--end--
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。