我需要构建目录中存在的文件列表,但还传递一个包含要排除的目录列表的文件。
我已经看到了下面的建议,但是当涉及到类型标志时我没有运气:
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