2013-01-09 35 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