あるディレクトリではファイルを見つけることができますが、別のディレクトリでは見つからないツールはありますか? [コピー]

あるディレクトリではファイルを見つけることができますが、別のディレクトリでは見つからないツールはありますか? [コピー]

あるディレクトリではこれらのファイルを見つけ、他のディレクトリでは見つからないbashスクリプトを作成したいと思います。

以下のスクリプトは機能しますか?そうでないときは?

for i in "$1"/*; do
    f=$(basename $i);
    if [ ! -e "$2"/"$f" ]
    then
        echo $f
    fi
done

diff 2つのディレクトリの内容の違いを見つけることも可能だと聞きました。同じ作業も解決できますか?

それとも別のツールですか?

ありがとうございます。

ベストアンサー1

はい、この目的に使用できますdiff。とても簡単です:

diff -rq dir1 dir2

この-rオプションはdiffまた、サブディレクトリに再帰するように指示します。この-qオプションは、diffファイルが異なる場合にのみ報告するように指示します。

dir1私は一般的に、どのファイルが存在し、存在しないか、またはその逆のファイルを探したいときにdir2これら2つのオプションを使用します。 (-rサブディレクトリに再帰的に移動したくない場合は、このパラメータを削除することもできますが、両方のディレクトリの直接的な内容のみを考慮してください。)

dir1ここには存在するが存在しないファイルdir2と、存在するが存在しないdir2ファイルが表示されますdir1。たとえば、次のようになります。

$ diff -rq /tmp/dir1/ /tmp/dir2/
Only in /tmp/dir1/: file1
Only in /tmp/dir2/: file2
Only in /tmp/dir2/: file3

指示の 1 つだけが必要で (例:dir1には存在しないファイルdir2)、ファイル名のリストのみを取得する場合 ("only in..." 混乱なし)、もちろん、などをdiff使用して出力をマッサージしてみることができます。grepただし、この場合は最初に使用しないで、sedStéphane Chazelasのソリューションを使用することをお勧めします。awkdiff

おすすめ記事