Unix 区分目录a和b。仅显示b中的文件,而不显示a中的文件

Unix 区分目录a和b。仅显示b中的文件,而不显示a中的文件,unix,diff,Unix,Diff,这个题目引起了我的问题。给定目录a和b,我希望能够生成b中但不在a中的文件列表 正常的差异会执行此操作,但它也会显示a中的文件,而不是b中的文件: $ diff -u /mnt/Media/a ~/b Only in /mnt/Media/a: abab Only in /home/conor/b: blah 我还希望diff只列出文件名-没有“仅在..”之类的东西 谢谢试试这个 选择其中一个: $ LANG=C diff -qr a b | awk -F"Only in b: " '

这个题目引起了我的问题。给定目录a和b,我希望能够生成b中但不在a中的文件列表

正常的差异会执行此操作,但它也会显示a中的文件,而不是b中的文件:

$ diff -u /mnt/Media/a ~/b    
Only in /mnt/Media/a: abab
Only in /home/conor/b: blah
我还希望diff只列出文件名-没有“仅在..”之类的东西

谢谢

试试这个 选择其中一个:

$ LANG=C diff -qr a b | awk -F"Only in b: " '/^Only in b:/{print $2}'

注 只是为了避免以英语以外的任何语言显示

医生
请参见uniq命令比您想象的更有用。考虑两个目录<代码> DRIA<代码>和<代码> DRB< <代码>:

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

dirA/s1:
f2

dirA/s2:
f1  f2

dirB:
s1/ s2/

dirB/s1:
f1  f2

dirB/s2:
f1
%
dirA
中缺少文件
s1/f1
,而
dirB
中缺少文件
s2/f2

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

% (cd dirA; find . -type f >../listA)
% (cd dirB; find . -type f >../listB)
现在查找仅出现在
列表B
中的行:

% cat listA listA listB | sort | uniq -u 
./s1/f1
% 

塔达

通常,当我不得不这样做时,我会选择低技术:

cd ~/a
find . -type f | sort > ~/fooa
cd ~/b
find . -type f | sort > ~/foob
vimdiff ~/fooa ~/foob

它可以让我细化结果。“哦,哎哟,我想从~/a中排除.svn目录”,所以重新运行不带.svn目录的~/fooa文件,然后重新定义。

嗨,这对我不起作用。仅使用“LANG=C diff-aqr a b”就可以列出两个目录之间的差异。。-a选项用于作为文本进行比较?我不想这样做,因为我比较的文件不是文本是的,这是文本。已卸下
-a
开关。如果它仍然“不起作用”,告诉我们到底出了什么问题。它列出了a中不在b中的文件和b中不在a中的文件。根据标题,我只想列出b中不在区域中的更晚的文件。我的回答A ok,抱歉,正在用命令的前半部分进行测试。现在使用你的完整答案工作。谢谢
% (cd dirA; find . -type f >../listA)
% (cd dirB; find . -type f >../listB)
% cat listA listA listB | sort | uniq -u 
./s1/f1
% 
cd ~/a
find . -type f | sort > ~/fooa
cd ~/b
find . -type f | sort > ~/foob
vimdiff ~/fooa ~/foob