一条命令删除目录及其子目录
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
将删除 test4
和 test2
目录,但不会删除 abc
目录,因为它仍然包含 test1
和 test2
.
从那里,rmdir -p /srv/abc/test1
只会删除 test1
,但在那之后,rmdir -p /srv/abc/test3
将删除 test3
和 abc
.
我正在尝试删除 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
将删除 test4
和 test2
目录,但不会删除 abc
目录,因为它仍然包含 test1
和 test2
.
从那里,rmdir -p /srv/abc/test1
只会删除 test1
,但在那之后,rmdir -p /srv/abc/test3
将删除 test3
和 abc
.