神刀安全网

Linux删除特定指定文件或者目录

 详细描述:在/var/下面的logs里面有ls -l 可以看到很多日志目录,目录里面有很多日志文件,现在要删除/var/logs 里面2008-2011年的所有日志目录,请大家帮看看如何删除,谢谢!
[root@monitor244 ~]ls -l |more
drwx—— 2 root root 4096 Oct 30  2011 logwatch.00jBv1PA
drwx—— 2 root root 4096 Dec 15  2009 logwatch.01ggoyJl
drwx—— 2 root root 4096 Feb 12  2012 logwatch.01XTlizg
drwx—— 2 root root 4096 May 26  2011 logwatch.03LZCixt
drwx—— 2 root root 4096 Oct  9  2010 logwatch.03UHWwaf
drwx—— 2 root root 4096 Dec 20  2011 logwatch.07DDkKEJ
drwx—— 2 root root 4096 Feb 25  2011 logwatch.09dmJZfs
drwx—— 2 root root 4096 Jul  6  2008 logwatch.0azGVrvs
drwx—— 2 root root 4096 Nov 14  2011 logwatch.0coL95ud
drwx—— 2 root root 4096 Jan 16  2009 logwatch.0DcQmPuD
drwx—— 2 root root 4096 May 13  2012 logwatch.0ENDgGUW
drwx—— 2 root root 4096 Jan 17  2012 logwatch.0fsBx9Uh
drwx—— 2 root root 4096 Apr 10  2010 logwatch.0hICgEsr
drwx—— 2 root root 4096 Jun 18  2009 logwatch.0htW5e8D

第一步,先通过一个命令获取到今天是2012年的第几天

复制内容到剪贴板

代码:

date +%j
318

第二步,就可以根据这个时间来查找需要得到的文件了,我随便做了12个文件,为了方便看结果,每个文件都是每年的1月1日和12月31日

复制内容到剪贴板

代码:

[root@182 111]# ll
total 0
-rw-r--r-- 1 root root 0 Jan  1  2007 20070101
-rw-r--r-- 1 root root 0 Dec 31  2007 20071231
-rw-r--r-- 1 root root 0 Jan  1  2008 20080101
-rw-r--r-- 1 root root 0 Dec 31  2008 20081231
-rw-r--r-- 1 root root 0 Jan  1  2009 20090101
-rw-r--r-- 1 root root 0 Dec 31  2009 20091231
-rw-r--r-- 1 root root 0 Jan  1  2010 20100101
-rw-r--r-- 1 root root 0 Dec 31  2010 20101231
-rw-r--r-- 1 root root 0 Jan  1  2011 20110101
-rw-r--r-- 1 root root 0 Dec 31  2011 20111231
-rw-r--r-- 1 root root 0 Jan  1  2012 20120101
-rw-r--r-- 1 root root 0 Nov 13 00:00 20121113

现在来搞真正的find命令

复制内容到剪贴板

代码:

首先可以通过-newer这个find参数来过滤掉08年1月1日之前的文件
[root@182 111]# find ./ -type f -newer 20071231|xargs ls -l
-rw-r--r-- 1 root root 0 Jan  1  2008 ./20080101
-rw-r--r-- 1 root root 0 Dec 31  2008 ./20081231
-rw-r--r-- 1 root root 0 Jan  1  2009 ./20090101
-rw-r--r-- 1 root root 0 Dec 31  2009 ./20091231
-rw-r--r-- 1 root root 0 Jan  1  2010 ./20100101
-rw-r--r-- 1 root root 0 Dec 31  2010 ./20101231
-rw-r--r-- 1 root root 0 Jan  1  2011 ./20110101
-rw-r--r-- 1 root root 0 Dec 31  2011 ./20111231
-rw-r--r-- 1 root root 0 Jan  1  2012 ./20120101
-rw-r--r-- 1 root root 0 Nov 13 00:00 ./20121113

但是这个结果貌似还有些不大完美,因为2012年的文件也给列出来了。再来看看接下来的命令

复制内容到剪贴板

代码:

这次在之前命令的基础上加了条-a -mtime +317,为啥是317看第一步吧。这样就不光列出08年至今的文件了,还过滤掉了所有2012年的文件
[root@182 111]# find ./ -type f -newer 20071231 -a -mtime +317|xargs ls -l
-rw-r--r-- 1 root root 0 Jan  1  2008 ./20080101
-rw-r--r-- 1 root root 0 Dec 31  2008 ./20081231
-rw-r--r-- 1 root root 0 Jan  1  2009 ./20090101
-rw-r--r-- 1 root root 0 Dec 31  2009 ./20091231
-rw-r--r-- 1 root root 0 Jan  1  2010 ./20100101
-rw-r--r-- 1 root root 0 Dec 31  2010 ./20101231
-rw-r--r-- 1 root root 0 Jan  1  2011 ./20110101
-rw-r--r-- 1 root root 0 Dec 31  2011 ./20111231

那么能不能只通过mtime来筛选出08年1月1日到11年12月31日之间的文件呢?当然可以了

复制内容到剪贴板

代码:

这样搞个逻辑判断!代表逻辑非,-a代表逻辑与。1778这么算来的?(1778-317-1)/4=365,多减1天是2008年2月29日
[root@182 111]# find ./ -type f ! -mtime +1778 -a -mtime +317|xargs ls -l
-rw-r--r-- 1 root root 0 Jan  1  2008 ./20080101
-rw-r--r-- 1 root root 0 Dec 31  2008 ./20081231
-rw-r--r-- 1 root root 0 Jan  1  2009 ./20090101
-rw-r--r-- 1 root root 0 Dec 31  2009 ./20091231
-rw-r--r-- 1 root root 0 Jan  1  2010 ./20100101
-rw-r--r-- 1 root root 0 Dec 31  2010 ./20101231
-rw-r--r-- 1 root root 0 Jan  1  2011 ./20110101
-rw-r--r-- 1 root root 0 Dec 31  2011 ./20111231

既然都找到了,那就可以删除啦

复制内容到剪贴板

代码:

之前xargs后边都是跟着ls -l,这次就直接写rm了,\rm是为了省去-f参数。
[root@182 111]# find ./ -type f ! -mtime +1778 -a -mtime +317|xargs \rm
[root@182 111]# ll
total 0
-rw-r--r-- 1 root root 0 Jan  1  2007 20070101
-rw-r--r-- 1 root root 0 Dec 31  2007 20071231
-rw-r--r-- 1 root root 0 Jan  1  2012 20120101
-rw-r--r-- 1 root root 0 Nov 13 00:00 20121113

基本上大工告成。

再次提醒LZ,删除文件千万谨慎,有条件的话搞个测试环境自己先试试看,以免一时大意追悔莫及。

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » Linux删除特定指定文件或者目录

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址