从 unix find 命令中排除目录列表

从 unix find 命令中排除目录列表

我需要构建目录中存在的文件列表,但还传递一个包含要排除的目录列表的文件。

我已经看到了下面的建议,但是当涉及到类型标志时我没有运气:

find $dir_name $(printf "! -name %s " $(cat $exclude_file))

有没有办法可以做到这一点,或者我需要创建整个列表,然后通过它删除与排除目录中部分匹配的列表。

答案1

鉴于您exclude_file包含路径,而不是名称,您需要使用它-path来匹配其条目。要排除匹配目录的子目录,您还需要-prune它们。这应该有效:

find . -type d \( $(printf -- "-path */%s -o " $(cat "$exclude_file")) -false \) -prune -o -print

如果您只想查看文件,则可以仅打印文件:

find . -type d \( $(printf -- "-path */%s -o " $(cat "$exclude_file")) -false \) -prune -o -type f -print

相关内容