我需要备份服务器的所有目录层次结构,因此我需要列出服务器中某些目录的所有子目录.
问题是其中一个子目录包含数万个子目录(只有子目录名称的文件可能需要几百兆字节,而相应的find命令需要很长时间).
例如,如果我有一个目录A和一个包含数万个子目录的子目录A/a,我想使用find命令列出A的所有子目录,但不包括 A/a的所有子目录但是不排除A/a本身.
我尝试使用这个问题中的答案的-prune的许多变体无济于事.
有没有办法find在UNIX中使用该命令来执行此操作?
更新:
@devnull的答案工作得很好,但现在我有另一个问题,所以我会稍微改进一下我的问题:
我使用以下命令:
find /var/www -type d \( ! -wholename "/var/www/web-release-data/*" ! -wholename "/var/www/web-development-data/*" \)
Run Code Online (Sandbox Code Playgroud)
这产生的新的问题是找到某种原因仍是遍历整个目录树"/var/www/web-release-data/"和"/var/www/web-development-data/",因此它的速度很慢,我担心它可能需要几个小时.
是否有任何方法使find完全排除这些目录而不遍历各自的目录层次结构?
以下内容应该适合您:
find A -type d \( ! -wholename "A/a/*" \)
Run Code Online (Sandbox Code Playgroud)
这将列出 的所有子目录,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
Run Code Online (Sandbox Code Playgroud)