我有一个包含文件的目录(目录A)。
目录B和C包含目录A中的文件(目录B中没有文件,反之亦然)。
如何列出目录A或目录C中不存在的目录A中的文件?
答案 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 comm
,find
和sort
,请参阅以下内容-当然,请更换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。