差异目录a和b.仅显示b中的文件,而不是a中的文件

con*_*nor 6 unix diff

标题是我的问题.给定目录a和b,我希望能够生成b中但不在a中的文件列表.

普通的差异可以做到这一点,但它也显示了不在b中的文件:

$ diff -u /mnt/Media/a ~/b    
Only in /mnt/Media/a: abab
Only in /home/conor/b: blah
Run Code Online (Sandbox Code Playgroud)

我也想让diff只列出文件名 - 没有"只在...中"的东西

谢谢

Gil*_*not 8

试试这个

拿起其中一个:

$ LANG=C diff -qr a b | awk -F"Only in b: " '/^Only in b:/{print $2}'
Run Code Online (Sandbox Code Playgroud)

要么

$ LANG=C diff -qr a b | grep -oP "^Only in b: \K.*"
Run Code Online (Sandbox Code Playgroud)

要么

$ LANG=C diff -qr a b | grep '^Only in b:' | cut -d: -f2-
Run Code Online (Sandbox Code Playgroud)

注意

LANG=C
Run Code Online (Sandbox Code Playgroud)

只是为了避免以任何语言环境显示而是用英语显示.

文件

看到 man diff


Nor*_*ray 5

uniq命令比您想象的更有用.考虑两个目录dirAdirB:

% ls -R dirA dirB
dirA:
s1/ s2/

dirA/s1:
f2

dirA/s2:
f1  f2

dirB:
s1/ s2/

dirB/s1:
f1  f2

dirB/s2:
f1
%
Run Code Online (Sandbox Code Playgroud)

文件s1/f1丢失dirA,文件s2/f2丢失dirB.

创建两个目录的内容列表:

% (cd dirA; find . -type f >../listA)
% (cd dirB; find . -type f >../listB)
Run Code Online (Sandbox Code Playgroud)

现在发现这是目前行listB:

% cat listA listA listB | sort | uniq -u 
./s1/f1
% 
Run Code Online (Sandbox Code Playgroud)

TA-DAH!