【转自】https://blog.csdn.net/with__sunshine/article/details/96352496
发现日志文件夹下面产生了很多无效的文件夹(docker启动项目失败后一直重试。。。。。),直接导致使用ls
命令查看文件夹内容时,屏幕卡住了。。。。
首先使用了命令ls -l > /root/find_manager_folder_name.txt
将当前文件夹下的所有文件的名称输出到/root/find_manager_folder_name.txt
,然后查看发现,文件竟然有5M多,里面包含了18w个文件夹,我丢。。。。。这就有点秀了。。。。。
如果能直接删除当前文件夹还好,为了防止删除正常的日志,于是想着删除其他无效的文件夹得了,将今天的正常的日志文件夹保留。
也就是博客题目提到的:删除当前某些文件夹
为了保险起见,我们要大致了解,我们需要删除的文件夹跟我们要保留的文件夹的区别,这样才能只删除该删除的。
首先还是先将所有的文件夹输出到文件中,这样方便我们筛选,我这里是将文件输出到/root目录下了。
接下来就是查找+删除
了
linux下刚好有这样的功能:find folderPath -option [-print] [-exec -ok command] {} \;
删除当前目录及其子目录下的所有xml文件: find . -type f -name '*.xml' -exec rm -rf {} \;
删除某个目录下及其子目录下的所有的.svn 文件夹: find /test/subtest -type d -name '.svn' -exec rm -rf {} \;
由于我这里文件夹命名方式是用时间来命名的,所以我首先尝试删除某一天的文件夹:
find /data/appslogs/manager -type d -name '2019-11-29*' -exec rm -rf {} \;
[root@docker_3_187 manager]# find /data/appslogs/manager -type d -name '2019-11-29*' -exec rm -rf {} \;
find: ‘/data/appslogs/manager/2019-11-29_10:54:04_10.0.0.51’: 没有那个文件或目录
find: ‘/data/appslogs/manager/2019-11-29_10:52:13_10.0.0.39’: 没有那个文件或目录
find: ‘/data/appslogs/manager/2019-11-29_10:52:55_10.0.0.43’: 没有那个文件或目录
find: ‘/data/appslogs/manager/2019-11-29_10:50:24_10.0.0.31’: 没有那个文件或目录
find: ‘/data/appslogs/manager/2019-11-29_10:51:50_10.0.0.37’: 没有那个文件或目录
find: ‘/data/appslogs/manager/2019-11-29_10:53:47_10.0.0.49’: 没有那个文件或目录
find: ‘/data/appslogs/manager/2019-11-29_10:52:34_10.0.0.41’: 没有那个文件或目录
find: ‘/data/appslogs/manager/2019-11-29_10:51:24_10.0.0.34’: 没有那个文件或目录
find: ‘/data/appslogs/manager/2019-11-29_10:53:29_10.0.0.47’: 没有那个文件或目录
find: ‘/data/appslogs/manager/2019-11-29_10:47:53_10.0.0.15’: 没有那个文件或目录
find: ‘/data/appslogs/manager/2019-11-29_10:49:54_10.0.0.29’: 没有那个文件或目录
find: ‘/data/appslogs/manager/2019-11-29_10:54:22_10.0.0.54’: 没有那个文件或目录
find: ‘/data/appslogs/manager/2019-11-29_10:50:55_10.0.0.33’: 没有那个文件或目录
find: ‘/data/appslogs/manager/2019-11-29_10:53:13_10.0.0.45’: 没有那个文件或目录
[root@docker_3_187 manager]#
然后将剩余文件输出:ls -1 > /root/find_manager_folder_name_del_2019_11-29.txt
查看发现当前文件夹下确实没有2019-11-29
当天的文件夹了。
接着就是直接删除2019-12
开头的文件夹:find /data/appslogs/manager -type d -name '2019-12*' -exec rm -rf {} \;
由于文件夹过多,导致屏幕一直在输出find: ‘/data/appslogs/manager/2019-12.。。’: 没有那个文件或目录
我想在屏幕输出这些信息的时候,删除操作应该已经执行了,但是不知道怎么将这个输出给屏蔽掉,又担心ctrl+c给当前删除操作也给停掉了,只好等着屏幕自己跑完了。
最后使用ls查看,发现删除后只剩余了保留的文件夹,完美收官!
最后补充: Linux中find常见用法示例
find path -option [ -print ] [ -exec -ok command ] {} \;
#-print 将查找到的文件输出到标准输出
#-exec command {} ; —–将查到的文件执行command操作,{} 和 ;之间有空格,{} 表示find到的结果,最后有反斜杠\ 和 分号 ; 表示命令结束
#-ok 和-exec相同,只不过在操作前要询用户
#find 根据下列规则判断 path 和 expression(命令选项参数 -option),在命令列上第一个 – ( ) , ! 之前的部份为 path,之后的是 expression。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。