假设我有两个目录结构:
/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 选项,您应该能够创建两个输出到两个文件中,其中列出了文件名和修改时间。然后,您应该能够比较这两个文件以查看发生了什么变化。
我了解您特别要求更新,但我认为了解您的所有选择总是好的。
我会使用 diff -ur dir1 dir2。
也许时间戳改变了,也许它没有改变,但这并不一定告诉你内容是否相同。Diff 会告诉你内容是否发生了变化。如果您真的不想查看内容,请使用 diff -rq 来查看已更改的文件。