我需要备份我们服务器的所有目录层次结构,因此我需要列出服务器中某些目录的所有子目录。
问题是其中一个子目录包含数万个子目录(仅包含子目录名称的文件可能需要数百兆字节,并且相应的查找命令需要很长时间)。
比如我有一个目录A和一个子目录A/a,里面有几万个子目录,我想用find命令列出A的所有子目录不包括 A/a 的所有子目录但不排除 A/a 本身。
我使用 this question 中的答案尝试了多种 -prune 变体无济于事。
有没有办法在 UNIX 中使用 find
命令来做到这一点?
更新:
@devnull 的回答非常好,但现在我有另一个问题,所以我会稍微提炼一下我的问题:
我使用了以下命令:
find /var/www -type d \( ! -wholename "/var/www/web-release-data/*" ! -wholename "/var/www/web-development-data/*" \)
出现的新问题是find不知为何还在遍历"/var/www/web-release-data/"
和"/var/的整个目录树www/web-development-data/"
,因此它非常慢,我担心它可能需要几个小时。
有没有办法让 find 完全排除那些目录而不遍历它们各自的目录层次结构?
最佳答案
以下应该适合您:
find A -type d \( ! -wholename "A/a/*" \)
这将列出 A
的所有子目录,包括 A/a
但不包括 A/a
的子目录。
例子:
$ mkdir -p A/{a..c}/{1..4}
$ find A -type d \( ! -wholename "A/a/*" \)
A
A/c
A/c/4
A/c/2
A/c/3
A/c/1
A/a
A/b
A/b/4
A/b/2
A/b/3
A/b/1
关于linux - 如何在 unix 中的 find 命令的搜索路径中排除给定目录的所有子目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18723126/