在Linux主机上,给定绝对路径,我想删除除特定目录之外的所有目录。 为了简化,下面是目录结构,我想删除除test2以外的所有目录
[root@hostname test]# pwd
/opt/data/test
root@hostname test]# ls -ltr
total 8
drwxr-xr-x 5 root root 4096 Dec 5 09:33 test1
drwxr-xr-x 2 root root 4096 Dec 5 09:44 test2
[root@hostname test]#
我看着How to exclude a directory in find . command并尝试了这种修剪开关
[root@hostname test]# find /opt/data/test -type d -path test2 -prune
-o ! -name "test2" -print
/opt/data/test
/opt/data/test/test1
/opt/data/test/test1/ls.txt
/opt/data/test/test1/test13
/opt/data/test/test1/test13/temp.py
/opt/data/test/test1/test13/try.pl
/opt/data/test/test1/test11
/opt/data/test/test1/test11/ls.txt
/opt/data/test/test1/test11/temp.py
/opt/data/test/test1/test11/try.pl
/opt/data/test/test1/test12
/opt/data/test/test1/test12/ls.txt
/opt/data/test/test1/test12/temp.py
/opt/data/test/test1/test12/try.pl
/opt/data/test/test1/temp.py
/opt/data/test/test1/try.pl
/opt/data/test/test2/ls.txt
/opt/data/test/test2/temp.py
/opt/data/test/test2/try.pl
[root@hostname test]
现在它列出了包括/ opt / data / test在内的所有文件夹,如果我将xargs rm -rf添加到此文件夹中,它也会删除父文件夹。我认为我不正确理解-path和-name概念,请帮忙
答案 0 :(得分:1)
使用-not
进行简单的求反可能比修剪更容易:
$ find /opt/data/test -type d -not -name test2
编辑:
没有理由递归到子目录,因为无论如何您都将删除顶部目录,因此可以添加-maxdepth
并避免在test2
内找到目录:
$ find /opt/data/test -maxdepth 1 -type d -not -name test2
答案 1 :(得分:0)
通过向find命令添加-mindepth 1以排除父目录,我能够实现所需的行为。