在一个命令中删除目录及其子目录

时间:2015-06-29 19:44:58

标签: linux bash shell automation find

我正在尝试删除linux中的空目录。在此之前,我使用以下命令删除过去7天内未访问过的文件

for x in $(cut -d: -f1 /etc/passwd); do 
   if [ -d "/srv/${x}" ]; then
   find /srv/${x} -mindepth 1 -type f -not -amin -10080 -exec rm {} \;
   fi
done

删除文件后,我想删除空目录。为此,我按照以下方式进行操作

for x in $(cut -d: -f1 /etc/passwd); do 
   if [ -d "/srv/${x}" ]; then
   find /srv/${x} -type d -empty -exec rmdir {} \;
   fi
done

我在dir结构上尝试了这个

/srv/abc/
├── test1
│   └── test1       (This is File)
├── test2
│   └── test4
│        └── test2   (This is File)
└── test3

执行/ srv / abc -type后f -exec rm {} \; 现在只剩下目录了

/srv/abc/
├── test1
├── test2
│   └── test4
└── test3

所以我跑了

find /srv/abc/ -type d -empty -exec rmdir {} \;

现在

/srv/abc/
└── test2

然后再次

find /srv/abc/ -type d -empty -exec rmdir {} \;

所以我想在一个命令中删除所有空目录。我知道这里发生了什么。当我第一次运行时find /srv/abc/ -type d -empty -exec rmdir {} \;它删除了该实例的空目录(test1,test3,test2 / test4但不是test2)

那么如果其子目录也为空,如何在同一命令中删除test2?

由于

1 个答案:

答案 0 :(得分:2)

rmdir命令有一个可选的-p--parents选项:

   -p, --parents
          remove DIRECTORY and its ancestors; e.g., 'rmdir -p a/b/c' is similar to 'rmdir a/b/c a/b a'

该选项应该按照您的意愿行事。

在您的示例目录中...

/srv/abc/
├── test1
├── test2
│   └── test4
└── test3

使用rmdir -p /srv/abc/test4将删除test4test2目录,但不删除abc目录,因为它仍包含test1test2
在那里,rmdir -p /srv/abc/test1只会移除test1,但在此之后,rmdir -p /srv/abc/test3会移除test3abc