有時會發生由於某種原因複製許多文件(即使用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