#find /tmp -mtime +30 -type f -name *.sh[ab] -exec rm -f {} \; 假如在一个目录中保留最近30天的文件,30天前的文件自动删除 #find /tmp -mtime +30 -type f -name *.sh[ab] -exec rm -f {} \; /tmp --设置查找的目录; -mtime +30 --设置时间为30天前; -type f --设置查找的类型为文件; -name *.sh[ab] --设置文件名称中包含sha或者shb; -exec rm -f --查找完毕后执行删除操作; 提示:将此命令写入crontab后即可自动完成查找并删除的工作 另外的方法大同小异 #find . -mtime +30 -type f | xargs rm -rf 另外的方法大同小异 #find . -mtime +30 -type f | xargs rm -rf $find . -type f -cmin +10 -exec rm -rf *.xml {} \; find . type f -name "debug*" -atime +3 -exec rm -f {} \; 首先cd进入目录: find . -name "*~" -exec rm {} \; find . -ctime +n -exec -exec rm -vi {} \; 这里的+n是指多少天以前,比如:+7 find . -ctime +7 -exec -exec rm -vi {} \; 如果不想手动确认,把命令中的-vi改成-fv find命令. 使用find时要区分清楚atime,ctime,mtime的区别,一般都使用mtime来查找,因为在ls -al显示出来的就是mtime时间戳,可以使用: # find $PAHT -mtime +3 -ok rm {} \; 在交互模式下删除比较保险。 一、按照一定日期格式命名文件 1、按照一定的格式输出日期: date +"%y%m%d" 格式说明: % : 印出 % %n : 下一行 %t : 跳格 %H : 小时(00-23) %I : 小时(01-12) %k : 小时(0-23) %l : 小时(1-12) %M : 分钟(00-59) %p : 显示本地 AM 或 PM %r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M) %s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数 %S : 秒(00-60) %T : 直接显示时间 (24 小时制) %X : 相当于 %H:%M:%S %Z : 显示时区 日期方面 : %a : 星期几 (Sun-Sat) %A : 星期几 (Sunday-Saturday) %b : 月份 (Jan-Dec) %B : 月份 (January-December) %c : 直接显示日期与时间 %d : 日 (01-31) %D : 直接显示日期 (mm/dd/yy) %h : 同 %b %j : 一年中的第几天 (001-366) %m : 月份 (01-12) %U : 一年中的第几周 (00-53) (以 Sunday 为一周的第一天的情形) %w : 一周中的第几天 (0-6) %W : 一年中的第几周 (00-53) (以 Monday 为一周的第一天的情形) %x : 直接显示日期 (mm/dd/yy) %y : 年份的最后两位数字 (00.99) %Y : 完整年份 (0000-9999) 2、命名带有日期的文件:filename`date +%y%m%d`,此处的"`"不是单引号。 二、以创建文件日期为界线删除文件 1、find命令简解 find pathname -options [-print -exec -ok ...] pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。 -print: find命令将匹配的文件输出到标准输出。 -exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } \;,注意{ }和\;之间的空格。 -ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。 options: -name 按照文件名查找文件。 -perm 按照文件权限来查找文件。 -prune 使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。 -user 按照文件属主来查找文件。 -group 按照文件所属的组来查找文件。 -mtime -n +n 按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项,但它们都和-m time选项。 -nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。 -nouser 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。 -newer file1 ! file2 查找更改时间比文件file1新但比文件file2旧的文件。 -type 查找某一类型的文件,诸如: b - 块设备文件。 d - 目录。 c - 字符设备文件。 p - 管道文件。 l - 符号链接文件。 f - 普通文件。 -size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。 -depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。 -fstype:查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。 -mount:在查找文件时不跨越文件系统mount点。 -follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。 -cpio:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。 对于时间相关的参数,有以下补充: -amin n 查找系统中最后N分钟访问的文件 -atime n 查找系统中最后n*24小时访问的文件 -cmin n 查找系统中最后N分钟被改变文件状态的文件 -ctime n 查找系统中最后n*24小时被改变文件状态的文件 -mmin n 查找系统中最后N分钟被改变文件数据的文件 -mtime n 查找系统中最后n*24小时被改变文件数据的文件 2、删除固定日期以前的文件 find logs -type f -mtime +5 -exec rm { } \; 1.创建一个基准时间文件 //比如创建一个“创建时间”为2010年01月01日00时00分的文件-- time_file //时间格式为 [[CC]YY]MMDDhhmm[.ss] # touch -t 201001010000 time_file 2.证实一下 # ll --time-style=long-iso time_file -rw-rw-r-- 1 work work 0 2010-01-01 00:00 time_file 3.找到并删除基准时间前的文件 # find . ! -newer time_file | xargs rm 4.删除基准文件 # rm -rf time_file 注:如果是要根据修改时间,则把newer改成cnewer,如果是根据访问时间,则把newer改为anewer 查找比某个文件新或旧的文件 如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用- n e w e r选 项。它的一般形式为: newest_file_name ! oldest_file_name 其中,!是逻辑非符号。 $ find . / -newer age.txt ! -newer belts.txt -exec ls -l {} \; 这里有两个文件,它们的更改时间大约相差两天。 下面给出的find命令能够查找更改时间比文件age.txt新但比文件belts.txt旧的文件: 如果想使用find命令的这一选项来查找更改时间在两个小时以内的文件,除非有一个现成 的文件其更改时间恰好在两个小时以前,否则就没有可用来比较更改时间的文件。为了解决 这一问题,可以首先创建一个文件并将其日期和时间戳设置为所需要的时间。这可以用t o u c h 命令来实现。 假设现在的时间是2 3 : 4 0,希望查找更改时间在两个小时以内的文件,可以首先创建这样 一个文件: $ touch -t 05042140 time.txt $ ls -l time.txt -rw-r--r-- root root 0 May 4 21:40 time.txt 一个符合要求的文件已经被创建;这里我们假设今天是五月四日,而该文件的更改时间 是2 1 : 4 0,比现在刚好早两个小时。 现在我们就可以使用find命令的-newer选项在当前目录下查找所有更改时间在两个小时以 内的文件: $ find ./ -newer time.txt -print