web-dev-qa-db-ja.com

別のディレクトリではなく、あるディレクトリでファイルを検索する

あるディレクトリ内のすべてのファイルを別のディレクトリにはないLinux/Unixツールはありますか?基本的に私はlsの出力で動作するdiffを探しています。

短くて甘いスクリプトも大歓迎です。

12

diffはすでにこれを行っています:

diff dir1 dir2

出力例:

Only in dir1: some_file.txt
Only in dir1: some_other_file.txt
Only in dir2: third_file.txt
20
tobym

バッシュ:

diff <(cd dir1; ls) <(cd dir2; ls)

ファイル名のみを比較し、ファイルの内容は比較しません。

人々がここであなたに言ったように、さまざまな使用法のバリエーションでDIFFを使用できます。または、代わりにdirdiffを使用するだけです。 :-)

しかし、いくつかのディレクトリを同期させておきたい場合は、rsyncを実際に確認する必要があります。

よろしく

4
Jan.

すべてのサブディレクトリでもこれを実行したい場合、それを行うための良い方法は次のとおりです。

diff --brief -r dir1/ dir2/

私はブリーフを使用することを好みますが、必要に応じて省略できます。

3
trueCamelType

for i in $(ls -1 directory1); do if (test -f directory2/$i) then echo $i; fi; done

1
James L

デニスウィリアムソンには 良い答え がありましたが、これを再帰的に行う必要がありました。 GNU findutils 4.7.0は出力をソートしないので、ここで私が使用したものです

diff <(cd $dir1; find | sort) <(cd $dir2; find | sort)

これを1つの方法で行い、ファイルのリストを作成するには、次のようにしました。

diff <(cd $dir1; find | sort) <(cd $dir2; find | sort) \
| grep '< ./' | sed "s,< ./,$dir1/,"

これが正しく機能するためには、$ dir1と$ dir2のどちらにも末尾のスラッシュを含めないでください。

0
sondra.kinsey

これは機能します。

ls -a1 /dir1 | sort > /tmp/1
ls -a1 /dir2 | sort > /tmp/2
diff /tmp/1 /tmp/2
0
Warner

未テスト:

find /dir/A -printf "%P" | while read f; do
  if [ ! -e "/dir/B/$f" ]; then
    echo $f
  fi
done
0
Javier