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

问题描述 投票:0回答:1

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

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

如何在目录A中列出目录B中没有的文件?

bash diff
1个回答
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,请参阅以下内容 - 当然,如果你想要能够安全地处理所有可能的文件名,最后用实际读取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

© www.soinside.com 2019 - 2024. All rights reserved.