批量删除大量空目录、快速删除空文件夹

菜鸡脚本,想看看除了awk内置语言外有没有其他方法快速删除空文件夹;

一条命令搞定,可直接看底部

海量空目录暂时没试过,会遍历目录下的所有文件,不过要想删除某一路径下的所有空目录无可避免的要遍历所有目录;

第一次:

命令:
[root@zabbix-server test]# find /root/test/| cat -n |sort -r|awk '{$1=""; print }'|xargs -i rmdir {}

言简意赅:
find  /root/test/        :要删除哪个路径下的空目录
cat   -n                :给查找的结果添加行号,方便排序
sort  -r                :反向排序,为了先删除子目录,再删除父目录
awk  '{$1="";print }'    :去除行号
xargs -i rmdir {}        :根据查找的结果逐条删除空目录,rmdir没有bug的话
                            安全的狠,不会删除文件和有子数据的目录。




演示(下面的123是个文件,其他的是目录):
[root@zabbix-server test]# tree
.
├── 123
├── 2
│   └── 22
├── 3
│   └── 33
├── 4
├── 5
└── 6
[root@zabbix-server test]#
[root@zabbix-server test]#
[root@zabbix-server test]#
[root@zabbix-server test]# pwd
/root/test
[root@zabbix-server test]# find /root/test/
/root/test/
/root/test/2
/root/test/2/22
/root/test/3
/root/test/3/33
/root/test/4
/root/test/5
/root/test/6
/root/test/123
[root@zabbix-server test]#
[root@zabbix-server test]#
[root@zabbix-server test]#
[root@zabbix-server test]# find /root/test/| cat -n |sort -r|awk '{$1=""; print }'|xargs -i rmdir {}
rmdir: failed to remove ‘/root/test/123’: Not a directory
rmdir: failed to remove ‘/root/test/’: Directory not empty
[root@zabbix-server test]# ls
123


目测没问题,不会删除任何文件数据,有bug概不负责

大量\海量数据的文件夹可增加这一项优化,没测试过,具体速度快多少可以尝试下:

#(下面的123是个文件,其他的是目录)
[root@zabbix-server test]# find /root/test/
/root/test/
/root/test/123
/root/test/2
/root/test/2/22
/root/test/3
/root/test/3/33
/root/test/4
/root/test/5
/root/test/6
[root@zabbix-server test]# find  /root/test/ -type d
/root/test/
/root/test/2
/root/test/2/22
/root/test/3
/root/test/3/33
/root/test/4
/root/test/5
/root/test/6


# 添加-type  d,意为只查找文件夹,看上面123那个文件就没出来

2022年3月23日09:21:25补充:

第二次:

也有更简洁的方式推荐,不过只会清理最底层的空目录

# 直接找出空目录,删除
find . -type d -empty|xargs -i  rmdir {}




# 例子:当前的目录层级如下
admin test # find .
.
./3
./3/33
./5
./6
./2
./2/22
./2/22/222
./4
# 可见直接列出了空目录路径
admin test # find . -type d -empty
./3/33
./5
./6
./2/22/222
./4

# 这种情况下,./2/22/222空目录被删除后./2/22也变成了空目录,但是一层目录./2和二层目录./2/22并不会被清理,只有底层目录222被清理,所以还是这条清理最彻底

find /root/test/ -type d | cat -n |sort -r|awk '{$1=""; print }'|xargs -i rmdir {}

第三次:效果和第二次相同,更简洁

find /home/amax/test/ -type d -empty|xargs -i rmdir -v -p  {}  

# rmdir 的-p 参数,和mkdir  -p一个作用,如果父目录是空也会删除  
# rmdir  -v可以展示删除详细

如果空文件和空目录都要删除的话:

#先删除空文件
find /home/amax/test -type f -empty|xargs -i rm {}
# 再删除空目录
find /home/amax/test/ -type d -empty|xargs -i rmdir -v -p  {} 
# 有更合适的方法请留言



如果只要删除同一级目录下的空文件和空目录:
find /home/amax/test -empty|xargs -i rm -d {}

 

    原文作者:大健的日常
    原文地址: https://blog.csdn.net/womenrendeme/article/details/123675018
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞