我有一个带文件的目录(目录A)。
目录B和C包含目录A中的文件(B中没有文件在C中,反之亦然)。
如何在目录A中列出目录B中没有的文件?
如果你不需要在非常大量的情况下快速:
for f_path in a/*; do f=${f_path#a/}
[[ -e "b/$f" || -e "c/$f" ]] && continue
printf '%s\n' "$f"
done
如果你这样做,并且有GNU comm
,find
和sort
,请参阅以下内容 - 当然,如果你想要能够安全地处理所有可能的文件名,最后用实际读取NUL分隔列表的代码替换tr
。 :
comm -z23 <(find a -maxdepth 1 -printf '%P\0' | sort -z) \
<(find b c -maxdepth 1 -printf '%P\0' | sort -z) \
| tr '\0' '\n'
有关comm
的使用的更多信息,请参阅BashFAQ #36。