我正在尝试删除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?
由于
答案 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
将删除test4
和test2
目录,但不删除abc
目录,因为它仍包含test1
和test2
。
在那里,rmdir -p /srv/abc/test1
只会移除test1
,但在此之后,rmdir -p /srv/abc/test3
会移除test3
和abc
。