2

我需要获取添加到主文件夹的文件列表,并仅将新文件复制到相应的备份文件夹;每个文件夹的路径有多个文件夹,所有文件夹都以数字命名,并且只有 1 级深度。

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

diff -r在生成的 diff.txt 文件中的每行 通常返回“仅在 /testing/a/101: 2093_thumb.png ”。

NOTE: there is a space after the colon 

我需要将路径和文件名中的101获取到单独的变量中,并将它们复制到备份文件夹中。

我需要获取 lesserfolder var 以获取101 而不使用冒号和 mainfile var 以从diff.txt 的每一行获取 2093_thumb.png 并执行 for 循环,但我似乎无法获得$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那么也可以。

4

2 回答 2

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/
于 2013-01-10T04:11:04.483 回答
0

你可以试试while read循环

diff -r $mainfolder $bacfolder | while read dummy dummy dir file; do
    echo $dir $file
done
于 2013-01-10T00:21:15.603 回答