日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

【Linux】32. shell脚本 定时删除 过时 的某类文件

發(fā)布時(shí)間:2025/3/21 linux 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Linux】32. shell脚本 定时删除 过时 的某类文件 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.功能:刪除該path目錄下的超過設(shè)定時(shí)間的文件夾以及這些文件夾中的文件

注意:只會(huì)刪除path目錄下的目錄,不會(huì)刪除path下的文件。

path=/home/user/dir # 下面的date若設(shè)置為負(fù)數(shù),表示刪除這些天內(nèi)修改過的目錄;若設(shè)置為正數(shù)(必須帶上+號(hào))表示刪除這些天內(nèi)未修改過的目錄。 date=+3 echo "path:"$path echo "date:"$datefunction rm_old_dir(){ for file in `ls $path` #注意此處這是兩個(gè)反引號(hào),表示運(yùn)行系統(tǒng)命令 doif [ -d $path"/"$file ] thenfind $path"/"$file -mtime $date |xargs rm -rf {}elseecho $path"/"$filefi done } rm_old_dir

2.寫一個(gè)shell腳本remove_file.sh,用來刪除文件,remove_file.sh內(nèi)容如下:

功能:刪除path1和path2目錄下(包括其子目錄下)的超過30天未修改的.bag .log等后綴結(jié)尾的文件。如果只需要?jiǎng)h除一個(gè)path路徑,直接去掉對(duì)應(yīng)的find語句即可。

path1=/home/user/dir1 path2=/home/user/dir2 date=+30 fileName=".bag .log .mp4 .mkv .gz .bin"echo "path1:"$path1 echo "path2:"$path2 echo "date:"$date echo "file:"$fileNameOLD_IFS="$IFS" IFS=" " array=($fileName) IFS="$OLD_IFS" for var in ${array[@]} dofind $path1 -mtime $date -name "*"$var | xargs rm -rf {}find $path2 -mtime $date -name "*"$var | xargs rm -rf {} done#### /etc/crontab #### */1 * * * * root bash /home/mdc/remove_files.sh

對(duì)于上面使用到的OLD_IFS="$IFS"命令可以參考博客:shell腳本中oldIFS=$IFS https://www.cnblogs.com/to-here/p/11884472.html.

  • $IFS是shell的一個(gè)特殊變量,它是一個(gè)內(nèi)部字段分隔符。
  • OLD_IFS="$IFS"是用一個(gè)新變量OLD_IFS來保存默認(rèn)的IFS;
  • 然后IFS=" "把IFS設(shè)置為空格,即空格為分隔符;
  • array=($fileName)就是把$fileName通過空格分割成數(shù)組;
  • 最后IFS="$OLD_IFS"就是還原IFS為默認(rèn)值。

對(duì)于上面使用到的find -mtime命令可以參考博客: https://blog.csdn.net/u010900754/article/details/83027831


3.在ubuntu定時(shí)執(zhí)行的系統(tǒng)文件/etc/crontab最后加上一句:

*/30 * * * * root bash /home/user/remove_file.sh

表示每30分鐘執(zhí)行一次刪除腳本。注意修改上面這句話對(duì)應(yīng)的路徑,/home/user/改為你remove_file.sh存放的目錄。




不推薦使用下面的一個(gè)shell腳本外加一個(gè)txt配置文件的方式,命令太復(fù)雜,我是記不住這下面的前幾行命令。

path=`sed '/^PATH=/!d;s/.*=//' remove_config.txt` date=`sed '/^DATE=/!d;s/.*=//' remove_config.txt` fileName=`sed '/^FILES=/!d;s/.*=//' remove_config.txt`echo "path:"$path echo "date:"$date echo "file:"$fileNameOLD_IFS="$IFS" IFS=" " array=($fileName) IFS="$OLD_IFS" for var in ${array[@]} dofind $path -mtime +$date -name "*"$var | xargs rm -rf {} done

再寫一個(gè)配置文件remove_config.txt ,用來配置要?jiǎng)h除的路徑,日期,文件格式
remove_config.txt 內(nèi)容如下:

PATH=/home/mdc/data/ DATE=30 FILES=.bag .log

上面的配置就是刪除/home/mdc/data/目錄下(也包括它的各級(jí)子目錄)的最后修改時(shí)間超過30天的.bag和.log結(jié)尾的文件。

總結(jié)

以上是生活随笔為你收集整理的【Linux】32. shell脚本 定时删除 过时 的某类文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。