あるディレクトリにあるすべてのファイルを別のディレクトリにはないLinux / Unixツールはありますか?基本的に私はlsの出力で動作するdiffを探しています。
短くて甘いスクリプトも大歓迎です。
あるディレクトリにあるすべてのファイルを別のディレクトリにはないLinux / Unixツールはありますか?基本的に私はlsの出力で動作するdiffを探しています。
短くて甘いスクリプトも大歓迎です。
回答:
diff
これはすでに行います:
diff dir1 dir2
出力例:
Only in dir1: some_file.txt
Only in dir1: some_other_file.txt
Only in dir2: third_file.txt
バッシュ:
diff <(cd dir1; ls) <(cd dir2; ls)
ファイル名のみを比較し、ファイルの内容は比較しません。
ls
、find
代わりに使用してください!
すべてのサブディレクトリを介してこれを実行したい場合、それを行う良い方法は次のとおりです。
diff --brief -r dir1/ dir2/
私はブリーフを使用することを好みますが、必要に応じて省略できます。
デニスウィリアムソンは良い答えを出しましたが、私はこれを再帰的に行う必要がありました。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のどちらにも末尾のスラッシュを含めないでください。
diff dir1 dir2 | grep "Only"