2013-01-09 39 views
2

我需要添加到主文件夾中的文件列表,並僅複製新文件到相應的文件夾備份做了;每個文件夾的路徑都有多個文件夾,所有文件夾均以數字命名,且只有1個深度。需要的bash分離cat'ed串分離變量和循環

ie /tester/a/100 
    /tester/a/101 ... 

diff -r返回通常爲 「只有/檢測/ A/101:2093_thumb.png」 在diff.txt文件中每行生成。

NOTE: there is a space after the colon 

我需要從路徑和文件名獨立變量,並將它們複製到備份文件夾。

我需要得到lesserfolder VAR得到沒有冒號 和mainfile VAR從diff.txt的每一行得到2093_thumb.png,做的循環,但我似乎無法到得到$file表現。每次我嘗試測試回顯變量時,我都會得到所有錯誤的結果。

#!/bin/bash 
diff_file=/tester/diff.txt 
mainfolder=/testing/a 
bacfolder= /testing/b 

diff -r $mainfolder $bacfolder > $diff_file 
LIST=`cat $diff_file` 

for file in $LIST 
    do 
    maindir=$file[3] 
    lesserfolder= 
    mainfile=$file[4] 
    # cp $mainfolder/$lesserFolder/$mainfile $bacfolder/$lesserFolder/$mainfile 
    echo $maindir $mainfile $lesserfolder 
done 

如果我能得到echo聲明工作cp會工作,然後過。

+2

這有什麼錯rsync的? – cmbuckley

回答

0

你可以嘗試while read循環

diff -r $mainfolder $bacfolder | while read dummy dummy dir file; do 
    echo $dir $file 
done 
1

我相信這是你想要什麼:(!和容易得多)

#!/bin/bash 
diff_file=/tester/diff.txt 
mainfolder=/testing/a 
bacfolder= /testing/b 

diff -r -q $mainfolder $bacfolder | egrep "^Only in ${mainfolder}" | awk '{print $3,$4}' > $diff_file 

cat ${diff_file} | while read foldercolon mainfile ; do 
    folderpath=${foldercolon%:} 
    lesserFolder=${folderpath#${mainfolder}/} 
    cp $mainfolder/$lesserFolder/$mainfile $bacfolder/$lesserFolder/$mainfile 
done 

但它是非常可靠的使用rsync這類的備份。例如:

rsync -a /testing/a/* /testing/b/ 
+0

感謝所有 - 結果rsync最好的效果 – user1213320

+0

不客氣。現在,除非答案中有什麼遺漏,請您接受它嗎?謝謝。 – igorrs