ディレクトリ1のファイルを比較し、ディレクトリ2のファイルを比較しませんか?

ディレクトリ1のファイルを比較し、ディレクトリ2のファイルを比較しませんか?

作成したいbashスクリプトの作成に問題があります。

lsがディレクトリ内のファイルを一覧表示していることを知っていますが、ディレクトリ1にはディレクトリが一覧表示されますが、ディレクトリ2には表示されていない次のディレクトリ1にはないディレクトリ2のファイルが一覧表示されます。

私は弱い試みで以下を試しました。

ls -al | diff directory1 directory2

なぜそれがうまくいかないのかを理解するには長い時間がかかりませんでした。誰でも完全なオタクを助けることができますか?

ベストアンサー1

bashを考えると、おそらくこれが最も簡単でしょう。

$ comm <(ls -a dir1) <(ls -a dir2)

式の<(command)実行注文する参照をパイプして交換します/dev/fd

mress:10018 Z$ echo <(ls)
/dev/fd/11

したがって、上記のコマンドはls -a各ディレクトリで実行され、その出力をファイル引数として提供し、comm最大3つの列を出力してタブをインデントします。最初のディレクトリのエントリのみ、両方のディレクトリのエントリ、および両方のディレクトリのエントリです。 (つまり、両方のファイルに存在する場合は1つのタブをインデントし、2番目のファイルにのみ存在する場合は2つのタブをインデントします)。 comm -1 foo bar2つのファイルの行のみを表示し、2番目のファイルの行のみを表示します。ファイル、後者は次にインデントされます一つブランド。 (最も一般的な方法は、必須列を除くすべての列を表示しないことです。 comm -13 foo bar一般的な行のみが表示されます。)

最初のディレクトリの内容が欲しいと仮定すると、これは次のことを意味します。

$ comm -23 <(ls -a dir1) <(ls -a dir2)

存在以上のものが必要な場合は、diff -r以下を使用してください。

おすすめ記事