一条命令删除目录及其子目录

Delete directory and its subdirectories in one command

我正在尝试删除 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

我在以下目录结构中试过这个

/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 的子目录也为空,我该如何删除同一命令中的 test2 呢?

谢谢

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.