0

動的な名前付きフォルダー内の他のアプリケーションによって生成されたファイルを 1 つだけバックアップしようとしています。例えば:

parent_folder/ 
   back_01 -> file_blabla.zip (timestam 2013.05.12)
   back_02 -> file_blabla01.zip (timestam 2013.05.14)
   back_03 -> file_blabla02.zip (timestam 2013.05.22)

そして、最新の生成されたzipを取得する必要があります。最新のものである限り、ファイルの名前は関係ありません。zipであり、「parent_folder」内にある場合は、それを取得します。

同様に、rsyncを実行すると、フォルダー構造+ファイル名が生成されます。そのファイルをフォルダーに名前を付けてバックアップすることを省略したいので、どこが最新で、常に同じ名前が付けられます。

今、私は最新の生成されたフォルダを取得するperlでこれをやっています

"ls -tAF | grep '/$' | head -1" 

rsyncを実行しますが、最後のzipをもたらしますが、最新のzipファイルを上書きしないため、フォルダー構造が望ましくありません。

rsync -rvtW --prune-empty-dirs --delay-updates --no-implied-dirs --modify-window=1 --include='*.zip' --exclude='*.*' --progress /source/ /myBackup/

また、perl やその他のスクリプトを使用せずに rsync を実行できれば素晴らしいと思います。

ありがとう

4

1 に答える 1

1

ファイル名は毎回異なりますか?

これは、どのタイプの同期でも機能するのが難しいでしょう。

あなたができることは次のとおりです。

  • 見つかった場所の外に新しいフォルダーを作成し、次のようにします。
  • 開始する前に、そのフォルダー内の最後のシンボリック リンク ファイルを削除します。
  • ファイルが見つかった場合、つまり ls -tAF | grep '/$' | head -1 ....このフォルダーにシンボリックリンクします
  • 次に、rsync、ssh、unison ファイルを新しいノードに渡します。
  • シンボリックリンク名が file-latest.zip の場合、常にこの 1 つのファイルが送信されます。

しかし、scpだけで、ここで見ることができるのに、なぜそんなことをするのですか:

https://github.com/vahidhedayati/definedscp は、この状況ではなく、実際のファイルの日付/時刻スタンプを使用してから秒に変換します...別の方法で統計する

stat を使用してファイルを作成し、最新のファイルを作成してから、単純に scp します。

一発ギャグ:

scp  $(find /path/to/parent_folder -name \*.zip  -exec stat -t {} \;|awk '{print $1" "$13}'|sort -k2nr|head -n1|awk '{print $1}') remote_server:/path/to/name.zip

より長く曲がりくねった方法で、上記が何をしているかを理解するのに役立つかもしれません:

#!/bin/bash
FOUND_ARRAY=()
cd parent_folder;
for file in $(find . -name \*.zip); do
  ptime=$(stat -t $file|awk '{print $13}');   
  FOUND_ARRAY+=($file" "$ptime)
done


IFS=$'\n'
FOUND_FILE=$(echo "${FOUND_ARRAY[*]}" | sort -k2nr | head -n1|awk '{print $1}');
scp $FOUND_FILE remote_host:/backup/new_name.zip
于 2013-05-23T17:31:42.907 に答える