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


12

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

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

回答:


20

diff これはすでに行います:

diff dir1 dir2

出力例:

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

5
これはいい。1つの不満:diffは実際には両方にある各ファイルで実行されています。ファイル名に対して実行するためのあいまいなオプションはありますか?それ以外の場合、私はお勧めしますdiff dir1 dir2 | grep "Only"
ウィリーバレンティン

bashのスクリプトのおかげで、この私だけ保存何分すごい
user5359531


4

ここで人々が言っ​​たように、DIFFはさまざまな使用法のバリエーションで使用できます。またはdirdiff、代わりに使用します。これは、試行しているもののためのものです!:-)

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

よろしく


3

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

diff --brief -r dir1/ dir2/

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



0

これは機能します。

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

0

未テスト:

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

0

デニスウィリアムソンは良い答えを出しましたが、私はこれを再帰的に行う必要がありました。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のどちらにも末尾のスラッシュを含めないでください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.