平时一般使用php脚本实现一些文件管理功能,总归没有shell脚本强大,虽然本人不会写shell脚本,但是读懂shell脚本还是没问题的。对于“递归删除空目录”这样简单的功能使用php来写有点麻烦,从网上搜到这样一个shell脚本实现非常简单:#!/bin/bash

# author: 十年后的卢哥哥

# des: delete empty directories recursive

deleteempty() {

find ${1:-.} -mindepth 1 -maxdepth 1 -type d | while read -r dir

do

if [[ -z "$(find "$dir" -mindepth 1 -type f)" ]] >/dev/null

then

echo "$dir"

rm -rf ${dir} 2>&- && echo "Empty, Deleted!" || echo "Delete error"

fi

if [ -d ${dir} ]

then

deleteempty "$dir"

fi

done

}

deleteempty

然后将这段代码保存为deleteempty.sh,然后将保存后的shell脚本放置到待删除的目录下,直接执行sh deleteempty.sh即可递归删除所有的空文件夹。

仔细读一下代码,发现作者其实已经实现了传参删除目录的功能,完全可以传入待删除目录的参数。于是,我将其改编如下:#!/bin/bash

# author: 十年后的卢哥哥

# des: delete empty directories recursive

deleteempty() {

find ${1:-.} -mindepth 1 -maxdepth 1 -type d | while read -r dir

do

if [[ -z "$(find "$dir" -mindepth 1 -type f)" ]] >/dev/null

then

echo "$dir"

rm -rf ${dir} 2>&- && echo "Empty, Deleted!" || echo "Delete error"

fi

if [ -d ${dir} ]

then

deleteempty "$dir"

fi

done

}

name=$1

deleteempty "$name"

使用$1来获取第一个参数,然后传给deleteempty函数进行递归删除,亲测可用。

案例:建立一个test目录,将deleteempty.sh上传至test目录,其子目录结构如下,[root@localhost test]# cd /test

[root@localhost test]# du -a

0       ./dir3/dirC/file5

4       ./dir3/dirC

8       ./dir3

4       ./dir2/dirA

8       ./dir2

4       ./dir4/dirD

0       ./dir4/file4

8       ./dir4

4       ./deleteempty.sh

4       ./dir5/dirE/dir_V

8       ./dir5/dirE

12      ./dir5

4       ./dir1

48      .

使用命令进行删除,删除后目录结构如下:

sh deleteempty.sh /test[root@localhost test]# sh deleteempty.sh /test

/test/dir2

Empty, Deleted!

/test/dir4/dirD

Empty, Deleted!

/test/dir5

Empty, Deleted!

/test/dir1

Empty, Deleted!

[root@localhost test]# du -a

0       ./dir3/dirC/file5

4       ./dir3/dirC

8       ./dir3

0       ./dir4/file4

4       ./dir4

4       ./deleteempty.sh

20      .

很明显,与file4和file5相关的目录都没被删除,而空目录无论多深都被删除了。

再次改造一下,这里不再使用shell脚本,而是将该脚本转换为linux的命令——命令为deleteempty[root@localhost test]# vi /usr/sbin/deleteempty

粘贴刚才的shell代码并保存退出

[root@localhost test]# chmod +x /usr/sbin/deleteempty

[root@localhost test]# which deleteempty

/usr/sbin/deleteempty

这时deleteempty可以作为一个简单的linux命令进行带参数删除,效果是一样的!

转载随意,但请附上文章地址:-)

linux 递归删除 空目录命令,使用shell脚本实现递归删除空目录相关推荐

  1. linux递归删除空文件夹,Shell脚本实现递归删除空文件夹

    有时我们需要递归删除空文件夹,网上找了一下,没有发现比较好的Shell脚本,于是自己动手写了一个 脚本 #!/bin/bash # author: 十年后的卢哥哥 # des: delete empt ...

  2. linux中循环删除脚本,shell脚本:遍历删除

    遍历删除文本内路径上文件 windows上测试可以安装Git linux中,准备删除文件的脚本deleteFile.sh,picture.txt保存待删除文件的文件路径,picture文件夹下面有三张 ...

  3. Linux系统中运行.sh(Shell脚本)文件

    本文转载自:百度经验:Linux下如何运行.sh文件 其中,以绝对路径运行方法: (1)./home/test/shell/hello.sh,可以这样运行是因为当前登录用户是root,当前路径是在/下 ...

  4. BASH命令和SHELL脚本学习

    BASH命令和SHELL脚本学习 转载于:https://www.cnblogs.com/huolong123/p/6228049.html

  5. linux 删除网卡配置文件,linux-如何通过命令行/ shell脚本从etc / wpa_supplicant / wpa_supplicant.conf中删除网络配置文件...

    我在etc / wpa_supplicant / wpa_supplicant.conf中保存了多个wifi网络ssid,如下所示, 我们可以从此wpa_supplicant.conf中删除特定的网络 ...

  6. linux命令行和shell脚本编程大全笔记

    第1章        初识Linux shell 内存存储单元按组划分成很多块,这些块称作页面(page) Linux操作系统将运行中的程序称为进程.进程可以在前台运行,将输出显示在屏幕上,也 可以在 ...

  7. linux遍历目录删除指定文件,利用shell脚本遍历文件夹内所有的文件并作整理统计的方法-linux删除文件夹...

    本篇文章扣丁学堂Linux培训小编给读者们分享一下利用shell脚本遍历文件夹内所有的文件并作整理统计的方法,文章具有很好的参考价值,感兴趣的小伙伴就随小编来了解一下吧. 环境: Ubuntu下采用s ...

  8. 《Linux命令行和Shell脚本开发圣经》:内容目录

    致谢 导语 第一部分:Linux命令行 第一节:从Linux Shell开始 1 Linux是什么? 1.1 管窥Linux内核(Kernel) 1.2 GNU应用程序 1.3 Linux桌面环境 2 ...

  9. linux定时监控端口并重新启动shell脚本命令

    以tomcat为例,监控并启动应用服务的端口shell脚本命令如下 #/bin/bashtime=`date +%Y-%m-%d-%H:%M` echo "app-Script start ...

最新文章

  1. 将时间改为显示:几天前,几小时前,或者几分钟前
  2. idea 文件流读取web-inf下的文件_C#初学者教程系列20:Stream流读写
  3. 开始阅读 深入理解计算机系统
  4. sqlmap代理池_sqlmap +外部代理池绕过IP拦截
  5. java任务分支和合并_合并/分支战略
  6. 【Python】Matplotlib绘制可爱机器人
  7. Codeforces 40 E. Number Table
  8. Go语言Web框架gwk介绍 (四)
  9. Varnish——CDN加速实现(单个后端服务器、缓存命中率情况)
  10. cocos creator基础-(十三)cc.Loader使用
  11. MFC 教程【11_MFC下的文件类 】
  12. 斜杠的意思是或还是和_pua是什么意思?我pua pua的解释给我老婆听!
  13. Hex2Bin使用方法
  14. 2021年9月再次更新-日立电梯,艾默生变频器维修图纸,原理图
  15. 2020年最新Django经典面试问题与答案汇总(上)-大江狗整理
  16. 学而时娱之,不亦乐乎
  17. 计算机考试记事本创建文件,你可能永远不知道的记事本功能
  18. 微信公众号svg互动_“戴上太阳镜,弗兰克”:与SVG面罩的互动
  19. imx6 linux can测试,iTOP-iMX6UL开发板-MiniLinux-CAN测试使用文档
  20. MacBook软件安装和更新与卸载

热门文章

  1. i5 11300H和i5 10300H 的区别
  2. linux简单快速启用web
  3. 有1,2,3,4四个数字,能组成多少个互不相同且无重复数字的三位数 都是多少
  4. FJUT寒假第一周作业浮点数查寻题解
  5. 简单拨号器(Android)
  6. NewSQL数据库VoltDB特性简介
  7. Robot Framework--08 List Variables-List变量及其用法
  8. 详解C调用lua脚本效率测试
  9. PHP 两个页面跳转,session会失效?
  10. vue 返回上一页传参_H5页面与微信小程序相互跳转并传参(web-view)