2 つのディレクトリ構造があるとします。
/var/www/site1.prod
/var/www/site1.test
find(1)/var/www/site1.test
を使用して、 の対応するファイルよりも新しい のファイルを表示したいと考えています/var/www/site1.prod
。
find(1)でこれを行うことはできますか?
rsync -n を使用することもできます
rsync -av -n /var/www/site1.test /var/www/site1.prod
するべきです。
検索を使用して、
cd /var/www/site1.test
find . -type f -print | while read file ; do
[ "$file" -nt /var/www/site1.prod/"$file" ] && echo "File '$file' changed"
done
これは、空白を含むファイル名で機能するだけでなく、大量のファイルでも機能します。
Eddieのコメントに従って、変更されたファイルと欠落しているファイルを区別するには、
cd /var/www/site1.test
find . -type f -print | while read file ; do
[ "$file" -nt /var/www/site1.prod/"$file" ] && reason=changed
[ \! -e /var/www/site1.prod/"$file" ] && reason=created
[ -n "$reason" ] && echo "$file $reason"
done
一人で見つけることはできないと思いますが、次のようなことはできます
$ cd /var/www/site1.test
$ files=`find .`
$ for $f in $files; do
if [ $f -nt /var/www/site1.prod/$f ]; then echo "$f changed!"; fi;
done
-fprintfオプションを見ると、ファイル名と変更時刻をリストした2つのファイルに出力される2つの検索結果を作成できるはずです。これで、2つのファイルを比較して、何が変更されたかを確認できるはずです。
あなたが特に新しいものを求めていることは理解していますが、すべての選択肢を知っておくのは常に良いことだと思います。
diff -urdir1dir2を使用します。
タイムスタンプが変更された可能性がありますが、変更されていない可能性がありますが、内容が同じであるかどうかは必ずしもわかりません。内容が変更されたかどうかをDiffが教えてくれます。内容を本当に見たくない場合は、diff -rqを使用して、変更されたファイルだけを確認してください。