【发布时间】:2013-09-14 09:52:30
【问题描述】:
我需要备份我们服务器的所有目录层次结构,因此我需要列出服务器中某些目录的所有子目录。
问题在于其中一个子目录包含数以万计的子目录(仅包含子目录名称的文件可能需要数百兆字节,并且相应的查找命令需要很长时间)。
比如我有一个目录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 完全排除那些目录而不遍历它们各自的目录层次结构?
【问题讨论】:
-
确定您想要
A/a/,而不是A/a/foo/(文件夹)而不是A/a/x(文件)? -
是的。我只想找到文件夹而不是文件。我用了一个一般的例子,但是是的。我想要 A/a 但不是 A/a/*(文件和文件夹)。甚至排除 A/a 也可以(我尝试排除 A/a 但失败了)。
-
对链接问题的接受答案正是您所需要的
-
我尝试了三个答案,但对我不起作用。