linux - 如何在 unix 中的 find 命令的搜索路径中排除给定目录的所有子目录

标签 linux bash unix

我需要备份我们服务器的所有目录层次结构,因此我需要列出服务器中某些目录的所有子目录。

问题是其中一个子目录包含数万个子目录(仅包含子目录名称的文件可能需要数百兆字节,并且相应的查找命令需要很长时间)。

比如我有一个目录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/

相关文章:

linux - AWK 输出格式和语法

c++ - 如何改善多线程应用程序中的延迟?

bash - crontab 运行但没有任何反应

python - 使用 setuptools 包括 Bash 自动补全

c++ - dup2( ) 导致子进程提前终止

linux - 如何以 yyyy-MM-ddTHH :mm:ssZ using date command in linux 格式打印时间

linux - 提供命令行参数时如何忽略目录和某些模式

linux - 自动挂载加密分区

linux - 帮助我从 ABS 指南中理解 bash 中的这个简单的 io 重定向

java - 用于 Java 的 Unix stat()/lstat()