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

时间:2018-09-05 15:27:30

标签: bash diff

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

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

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

1 个答案:

答案 0 :(得分:3)

如果在非常大的情况下不需要快速进行操作:

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\0' | sort -z) \
          <(find b c -maxdepth 1 -printf '%P\0' | sort -z) \
  | tr '\0' '\n'

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