我在目录A
中有很多文件。
其中一些文件存在于包含子目录B/B1
,B/B2
,B/B3
,B/B4
的目录树中,...
请注意,某些文件的名称中包含空格。
例如:
目录A
中的:
A/red file.png
还有另一个名为A/blue file.png
,在目录树B
中:
有一个名为B/small/red file.png
在这个例子中,我想要一个脚本告诉我文件blue file.png
在B
目录中不存在。
如何编写一个脚本,列出A
中目录树B
下找不到的所有文件?
答案 0 :(得分:5)
# A
# ├── blue file.png
# └── red file.png
# B
# └── small
# └── red file.png
$ comm -23 <( find A -type f -printf '%f\n' | sort | uniq ) <( find B -type f -printf '%f\n' | sort | uniq )
blue file.png
如果find
缺少-printf
,您可以尝试:
comm -23 <( find A -type f -exec basename {} \; | sort | uniq ) <( find B -type f -exec basename {} \; | sort | uniq )
答案 1 :(得分:0)
此版本可以处理所有文件名,包括包含换行符的文件名:
comm -z23 <(find dir1 -type f -printf '%f\0' | sort -uz) <(find dir2 -type f -printf '%f\0' | sort -uz) | xargs -0 printf '%s\n'