3

我在一个目录中有很多文件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

4

2 回答 2

7
# 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 )
于 2012-07-11T20:08:26.307 回答
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'
于 2019-08-09T12:59:10.157 回答