あるディレクトリではこれらのファイルを見つけ、他のディレクトリでは見つからない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
ただし、この場合は最初に使用しないで、sed
Stéphane Chazelasのソリューションを使用することをお勧めします。awk
diff