2011-03-20 85 views
1

有時會發生由於某種原因複製許多文件(即使用Nautilus文件管理器到外部硬盤)的過程崩潰。如果我再次啓動它,我會忽略已存在的文件,儘管其中有些文件未被複制100%。因此,屬性窗口顯示了源文件夾中的「460個文件(225 GB)」和目標文件夾中的「460個文件(222 GB)」...比較bash中2個目錄的所有文件大小

我現在該如何找出哪些文件只被部分複製可能使用lsdiff)?

回答

3

如果您有rsync可用,那麼在兩個本地目錄之間工作得很好。

+0

+1。這絕對是同步目錄的方式,它比使用shell腳本所能做的任何事情都快。 – 2011-03-20 17:21:59

+0

不是這個問題的答案,但是最好的答案是:-)我之前使用過一次或兩次rsync,但並不認爲這比僅僅使用cp'ing要好得多...... – flo 2011-03-20 20:52:14

+0

有時候「不要打敗你自己用錯誤的工具頭「是問題的答案。 :-) – Blrfl 2011-03-20 21:50:22

2
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 
0

我修改了丹尼斯的代碼。它比較文件大小。比較校驗和更快但不安全。

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

如果你有'stat'可用。另外,你應該使用'$()'而不是反引號。而且,對於每個'echo'語句,一組引號就足夠了。你爲什麼這樣打破他們? – 2011-03-20 20:02:35

+0

這不適用於子目錄,會嗎??因爲我的文件夾包含許多子文件夾與其他子文件夾等等,所以我認爲最好用'find'(?) – flo 2011-03-20 20:56:50

+0

完成耶對於子目錄是行不通的。應該寫這個。 – alperenc 2011-03-20 23:34:47

相關問題