Unix 区分目录a和b。仅显示b中的文件,而不显示a中的文件
这个题目引起了我的问题。给定目录a和b,我希望能够生成b中但不在a中的文件列表 正常的差异会执行此操作,但它也会显示a中的文件,而不是b中的文件: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: " '
$ 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