使用 bash 确定目录 A 中不存在于目录 B 和 C 中的文件

Use bash to determine files in Directrory A that do not exist in Directories B and C

我有一个包含文件的目录(目录 A)。

目录 B 和 C 包含目录 A 中的文件(B 中没有文件在 C 中,反之亦然)。

如何列出目录 A 中不存在于目录 B 和 C 中的文件?

如果您不需要在非常大批量的情况下快速处理:

for f_path in a/*; do f=${f_path#a/}
  [[ -e "b/$f" || -e "c/$f" ]] && continue
  printf '%s\n' "$f"
done

如果您,并且有 GNU commfindsort,请参阅以下内容——当然,替换tr 如果您希望能够安全地处理所有可能的文件名,最后的代码实际上会正确读取以 NUL 分隔的列表:

comm -z23 <(find a -maxdepth 1 -printf '%P[=11=]' | sort -z) \
          <(find b c -maxdepth 1 -printf '%P[=11=]' | sort -z) \
  | tr '[=11=]' '\n'

有关 comm 用法的更多信息,请参阅 BashFAQ #36