6

タイトルは私の質問を要約しています。ディレクトリaとbを指定して、bにはあるがaにはないファイルのリストを生成できるようにしたい。

通常の差分ではこれが行われますが、b ではなく a にあるファイルも表示されます。

$ diff -u /mnt/Media/a ~/b    
Only in /mnt/Media/a: abab
Only in /home/conor/b: blah

また、ファイル名のみをリストするようにdiffしたいと思います-「Only in ..」のものはありません

ありがとう

4

3 に答える 3

8

これを試して

これらのいずれかをピックアップ:

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

また

$ LANG=C diff -qr a b | grep -oP "^Only in b: \K.*"

また

$ LANG=C diff -qr a b | grep '^Only in b:' | cut -d: -f2-

ノート

LANG=C

ロケール言語ではなく英語で表示されるのを避けるためだけに存在します。

ドク

見るman diff

于 2013-03-27T19:38:53.273 に答える
5

このuniqコマンドは、想像以上に便利です。2 つのディレクトリdirAとを考えてみましょうdirB:

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

dirA/s1:
f2

dirA/s2:
f1  f2

dirB:
s1/ s2/

dirB/s1:
f1  f2

dirB/s2:
f1
%

ファイルs1/f1が から欠落してdirAおり、ファイルs2/f2が から欠落していdirBます。

2 つのディレクトリの内容のリストを作成します。

% (cd dirA; find . -type f >../listA)
% (cd dirB; find . -type f >../listB)

にのみ存在する行を見つけますlistB

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

タダ!

于 2013-03-27T20:05:57.197 に答える
4

通常、これを行う必要があるときは、ローテクになります。

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

結果を絞り込むことができます。「ああ、おっと、~/a から .svn ディレクトリを除外したかった」ので、.svn ディレクトリなしで ~/fooa ファイルを再実行してから rediff します。

于 2013-03-27T20:14:16.093 に答える