(中間ファイルに書き込むことなく)2つのディレクトリでファイル名を比較する方法は?


31

私は次のラインに沿って何かをしようとしています:

diff `ls -1a ./dir1` `ls -1a ./dir2`

しかし、それは明らかな理由で機能しません。これを達成するより良い方法はありますか(1行で)、これよりもいいですか?

ls -1a ./dir1 > lsdir1
ls -1a ./dir2 > lsdir2
diff lsdir1 lsdir2

ありがとう

回答:



10
diff -rq dir1 dir2

-rオプションを使用して、ディレクトリツリー全体を探索し、各ツリーの比較可能なポイントで発生するサブディレクトリとファイルの違いを再帰的にチェックします。トリックは、-qオプションを使用して、行ごとの比較を抑制することです。


3
@festo:あなたはこの質問の要点を見逃してしまいました、私は実際にファイルの内容を比較したくありません、lsコマンドの出力を
比較し

+1、実際には、1つの警告で同じ出力が得られました。diff-rqは、リンクされたファイルを「そのようなファイルまたはディレクトリはありません」と報告しました。そのため、1つを追加すると、正しい、率直に言って簡単に使用できます。(たとえIVAの答えがプロセス置換のより良い「学習機会」であったとしても(> _ <)
xtian

1
これは、ファイル名を比較するよりもはるかに遅くなります。すべてのファイル全体を読み取って比較する必要があります。
ザズ2014

当然の@Josh、それがないので、再帰的に....
Braiam

1
@Braiam:ファイル名を再帰的にdiffしても(たとえばrsync--dry-runオプションを使用して)、それよりもはるかに高速ですdiff -r
ザズ14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.