有时会发生由于某种原因复制许多文件(即使用Nautilus文件管理器到外部硬盘)的过程崩溃。如果我再次启动它,我会忽略已存在的文件,尽管其中有些文件未被复制100%。因此,属性窗口显示了源文件夹中的“460个文件(225 GB)”和目标文件夹中的“460个文件(222 GB)”...比较bash中2个目录的所有文件大小
我现在该如何找出哪些文件只被部分复制可能使用ls
和diff
)?
有时会发生由于某种原因复制许多文件(即使用Nautilus文件管理器到外部硬盘)的过程崩溃。如果我再次启动它,我会忽略已存在的文件,尽管其中有些文件未被复制100%。因此,属性窗口显示了源文件夹中的“460个文件(225 GB)”和目标文件夹中的“460个文件(222 GB)”...比较bash中2个目录的所有文件大小
我现在该如何找出哪些文件只被部分复制可能使用ls
和diff
)?
如果您有rsync
可用,那么在两个本地目录之间工作得很好。
for f1 in dir1/*
do
f2="dir2/${f##*/}"
if [[ $(sum "$f1") != $(sum "$f2") ]]
then
printf 'File %s does not match %s\n' "$f1" "$f2"
fi
done
或者你可以使用它作为你的测试:
if ! diff -q "$f1" $f2" >/dev/null
我修改了丹尼斯的代码。它比较文件大小。比较校验和更快但不安全。
source=/???
target=/???
for i in "$source"/*
do
f1=`stat -c%s $i`
f2=`stat -c%s $target/${i##*/}`
if [ "$f1" = "$f2" ]; then
echo "$i" "$f1" VS "$target/${i##*/}" "$f2" "====>>>" "OK"
else
echo "$i" "$f1" VS "$target/${i##*/}" "$f2" "====>>>" "BAD"
fi
done
+1。这绝对是同步目录的方式,它比使用shell脚本所能做的任何事情都快。 – 2011-03-20 17:21:59
不是这个问题的答案,但是最好的答案是:-)我之前使用过一次或两次rsync,但并不认为这比仅仅使用cp'ing要好得多...... – flo 2011-03-20 20:52:14
有时候“不要打败你自己用错误的工具头“是问题的答案。 :-) – Blrfl 2011-03-20 21:50:22