2

マスター フォルダーに追加されたファイルのリストを取得し、新しいファイルのみをそれぞれのバックアップ フォルダーにコピーする必要があります。各フォルダーへのパスには複数のフォルダーがあり、すべて番号で名前が付けられ、深さは 1 レベルのみです。

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

diff -r通常、生成された diff.txt ファイルの行ごと に " Only in /testing/a/101: 2093_thumb.png " を返します。

NOTE: there is a space after the colon 

パスとファイル名から101を別の変数に取得し、それらをバックアップ フォルダーにコピーする必要があります。

diff.txt の各行から2093_thumb.png を取得して for ループを実行するには、lesserfolder 変数を取得してコロンなしで101を取得し、mainfile 変数を取得する必要があり ますが、動作するようには見えません。変数をエコーするためにテストしようとするたびに、すべて間違った結果が得られます。$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 に答える