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

Mat*_*mon 4 bash find

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

我已经看到了以下建议,但在类型标志方面我没有运气:

find $dir_name $(printf "! -name %s " $(cat $exclude_file))
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*itt 9

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

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

如果只想查看文件,则只能打印文件:

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