【Linux】32. shell脚本 定时删除 过时 的某类文件
1.功能:刪除該path目錄下的超過設(shè)定時(shí)間的文件夾以及這些文件夾中的文件
注意:只會(huì)刪除path目錄下的目錄,不會(huì)刪除path下的文件。
path=/home/user/dir # 下面的date若設(shè)置為負(fù)數(shù),表示刪除這些天內(nèi)修改過的目錄;若設(shè)置為正數(shù)(必須帶上+號)表示刪除這些天內(nèi)未修改過的目錄。 date=+3 echo "path:"$path echo "date:"$datefunction rm_old_dir(){ for file in `ls $path` #注意此處這是兩個(gè)反引號,表示運(yùn)行系統(tǒng)命令 doif [ -d $path"/"$file ] thenfind $path"/"$file -mtime $date |xargs rm -rf {}elseecho $path"/"$filefi done } rm_old_dir2.寫一個(gè)shell腳本remove_file.sh,用來刪除文件,remove_file.sh內(nèi)容如下:
功能:刪除path1和path2目錄下(包括其子目錄下)的超過30天未修改的.bag .log等后綴結(jié)尾的文件。如果只需要?jiǎng)h除一個(gè)path路徑,直接去掉對應(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對于上面使用到的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)值。
對于上面使用到的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í)行一次刪除腳本。注意修改上面這句話對應(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)容如下:
上面的配置就是刪除/home/mdc/data/目錄下(也包括它的各級子目錄)的最后修改時(shí)間超過30天的.bag和.log結(jié)尾的文件。
總結(jié)
以上是生活随笔為你收集整理的【Linux】32. shell脚本 定时删除 过时 的某类文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【自动驾驶】8. MDC通信架构 + D
- 下一篇: 【网络知识】1. 路由器或网桥的2.4G