Shell脚本实现递归删除空文件夹

有时我们需要递归删除空文件夹,网上找了一下,没有发现比较好的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

脚本的内容很简单,就是遍历目录,找出空文件夹,然后删除。

使用

假如脚本文件为dedr.sh,我们测试的文件结构为:

运行脚本:

代码如下:

# sh dedr.sh

删除的文件:

结果:

我们可以看到空文件夹已经被删除了。

(0)

相关推荐

  • 使用bash shell删除目录中的特定文件的3种方法

    我是一名Linux新用户.现在我需要清理一个下载目录中的文件,其实我就是想从-/Download/文件夹删去除了以下格式的文件外所以其它文件: 1.*.iso - 所有的iso格式的文件. 2.*.zip - 所有zip格式的文件. 我如何在一个基于Linux,OS X 或者 Unix-like 系统上的bash shell中删除特定的文件呢? Bash shell 支持丰富的文件模式匹配符例如: 1.* - 匹配所有的文件. 2.? - 匹配文件名中的单个字母. 3.[...] - 匹配封闭括

  • Shell中如何删除文本比较长的行的实现方法

     Shell中如何删除文本比较长的行的实现方法 有的时候需要对文件执行删除删除操作,这个时候比较常用的会使用vi命令中的dd命令,比如先执行10G(跳转到第10行),然后再执行20dd(删除20行),但实际情况未必是这么常规,比如说,要删除文件中,某行长度超过200个字符的行,如果文本比较小,还好,如果是几万行,几十万行的呢? 这个想用vi就不现实了. 我然想到的办法就是:比如说,通过sed,awk,egrep命令来达到目的. 举个简单例子. 假如说如下文本文件,要将其中长度为5字符以上的给删除

  • Shell脚本实现删除邮件队列

    最近遇到了一个麻烦事:机器上邮件队列里老是被塞满,但是又不知道是什么地方发邮件写入的,十分蛋疼,没办法,只有临时处理一下了,写了个删除邮件的脚本rm_mqueue.sh. 复制代码 代码如下: #/bin/bash ###################################### #  touched by lingyun1 on 2014-12-01  # ###################################### #定义堵塞邮件文件路径 quepath=/var

  • Shell脚本实现删除一年前文件功能分享

    复制代码 代码如下: #!/bin/bash #Description: delete files #=====定义当前年份,月份以及文件所在目录=====# currentYear=`date +%Y`                                        currentMonth=`date  +%m |awk -F'0' '{print $2}'`   videodir=/var/video                                      

  • PowerShell查询和删除打印任务操作代码实例

    适用于Windows 8.1或Server 2012 R2 Windows 8.1 和 Server 2012 R2上自带了一个PowerShell组件:"PrintManagement",它包含了所有管理本机和远程打印机的命令. 在之前的小技巧中,我们演示了如何读取打印机任务.每一个打印任务都有一个属性JobStatus ,用来表示该任务是否打印成功. 所有的状态可以这样获取: 复制代码 代码如下: PS> Import-Module PrintManagement   PS&

  • shell实现tr删除替换详解

    tr(translate缩写)主要用于删除文件中的控制字符,或进行字符转换. 语法:tr [–c/d/s/t] [SET1] [SET2]   #SET1: 字符集1:SET2:字符集2             -c:complement,用SET2替换除SET1以外的字符.             -d:delete,删除SET1中所有的字符,不转换.             -s:squeeze-repeats,压缩SET1中重复的字符.             -t:truncate-se

  • PowerShell中删除空格、点号、减号和换行方法代码实例

    复制代码 代码如下: $text = ' ... Hello ...---  ' $text.Trim(" .-`t`n`r") 结果只显示:Hello

  • Shell脚本自动删除指定大小以上的备份文件

    最近本地虚拟机的空间老是被备份给占满,为了偷懒不想自己天天登录上去清除,才写了这个自动清理脚本. 系统:centos 5.x 脚本内容: cat make_room.sh 复制代码 代码如下: #!/bin/bash #size=`df -hP|grep /dev/mapper/VolGroup00-LogVol00|awk '{print $4}'|cut -f 1 -d "G"` size=`df -mP|grep /dev/mapper/VolGroup00-LogVol00|a

  • Shell脚本实现递归删除空文件夹

    有时我们需要递归删除空文件夹,网上找了一下,没有发现比较好的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 "

  • Lua脚本实现递归删除一个文件夹

    复制代码 代码如下: rmdir in quick-cocos2d-x with lua. 在使用 quick-cocos2d-x 做项目热更新的时候,我需要建立临时文件夹以保存下载的更新包.在更新完成后,我需要删除这些临时文件和文件夹. cocos2d-x 和 quick-cocos2d-x 都没有提供删除文件夹功能.我做了如下2个尝试: 1. 使用C++ 在 cocos2d-x 2.x 中的 AssetsManager包中提供了一个 CreateDirectory 方法.这个方法可以跨平台支

  • Lua中实现递归删除一个文件夹

    在使用 quick-cocos2d-x 做项目热更新的时候,我需要建立临时文件夹以保存下载的更新包.在更新完成后,我需要删除这些临时文件和文件夹. cocos2d-x 和 quick-cocos2d-x 都没有提供删除文件夹功能.我做了如下2个尝试: 1. 使用C++ 在 cocos2d-x 2.x 中的 AssetsManager包中提供了一个 CreateDirectory 方法.这个方法可以跨平台支持创建文件夹.在实际项目中运行没有问题. 复制代码 代码如下: bool AssetsMan

  • php递归删除指定文件夹的方法小结

    本文实例总结了两种php递归删除指定文件夹的方法.分享给大家供大家参考.具体如下: 方法一: function recursiveDelete($dir) { if ($handle = @opendir($dir)) { while (($file = readdir($handle)) !== false) { if (($file == ".") || ($file == "..")) { continue; } if (is_dir($dir . '/' .

  • python 两种方法删除空文件夹

    第一种方法: import os def delete_gap_dir(dir): if os.path.isdir(dir): for d in os.listdir(dir): #print('1',os.path.join(dir, d)) path = os.path.join(dir, d) if os.path.isdir(path) and not path.endswith('pic_neg'): delete_gap_dir(path) if not os.listdir(di

  • 批处理删除空文件夹

    实现代码: 复制代码 代码如下: @echo off for /f "tokens=*" %%a in ('dir /b /ad /s "目标文件夹"^|sort /r') do rd "%%a" 2>nul pause goto :eof @echo off for /f "delims=" %%i in ('dir /ad /b /s') do call :rd_dir_empty "%%i" g

  • linux下采用shell脚本实现批量为指定文件夹下图片添加水印的方法

    要实现linux下采用shell脚本批量为指定文件夹下图片添加水印,首先需要安装imagemagick: CentOS上安装: yum install ImageMagick -y Debian上安装: apt-get install ImageMagick -y 脚本: #!/bin/bash for each in /要处理的图片目录/*{.jpg,.gif} s=`du -k $each | awk '{print $1}'` if [ $s -gt 10 ]; then #convert

  • shell脚本实现定时删除文件或文件夹

    一.删除XX天(默认10天)之前某个目录下面带.log的日志文件,并且输出文件显示删除的文件 #!/bin/sh #如果没有输入变量值,默认天数为10 start=$(date +%y-%m-%d-%H%M%m) File=/temp/delete_$start.txt FilePath=/data echo $File if [ ! -n "$1" ]; then     day=10 else      day=$1 fi #-mtime 10 表示文件修改时间距离当前为0天的文件

  • 解决Centos7下crontab+shell脚本定期自动删除文件问题

    问题描述: 最近有个需求,就是rsync每次同步的数据量很多,但是需要保留的数据库bak文件 保留7天就够了,所以需要自动清理文件夹内的bak文件 解决方案: 利用shell脚本来定期删除文件夹内的任务 1.创建shell文件 [root@zabbix script]# vim backup_sql_clean.sh #!/bin/sh find /data1/backup/KDKDA\$AGKDPAYKT/XNAKSD/FXUIJ -mtime +10 -name "*.bak" -

  • php 删除指定文件夹的实例讲解

    1.前言 目标:php删除一个指定目录 所使用的的php函数:is_dir,opendir,readdir,scandir,rmdir,closedir,等等(注:其他文件操作函数也可以完成,这里只列举了本次使用的函数) 2.相关函数介绍 php文件操作的方法大致相同,已经在上一篇介绍过了,这里就不在重复介绍,这里就介绍一个新函数 rmdir 详情参考:http://www.w3school.com.cn/php/func_filesystem_rmdir.asp 3.代码构成 ** * [de

随机推荐