2017-10-11 13 views
0

1つのフォルダXからいくつかのファイル(100 kbs /ファイル)をコピーする必要があります。その後、フォルダではなくファイルを削除する必要があります。今までは簡単ですが、フォルダXはファイルをほぼ連続的に受信します。ファイルが連続して来るので、スクリプトが最初に5つのファイルをXにコピーし、次に8をYにコピーして10を削除するケースが考えられます。Bash |複数のフォルダにファイルをコピーしてスクリプトを削除する

私は2000個のファイルをテストし、すべてがうまくいった。しかし、私は100%確実にファイルを失うことはありません。

は、これが私のスクリプトです:

cp -R -v /$RootPath/MAPADMIN/$Client/Inbox/* /$RootPath/$Client/Inbox/ >> log.txt 
cp -R -v /$RootPath/MAPADMIN/$Client/Inbox/* /$RootPath/Backup/$Client/Inbox >> log.txt 
find /$RootPath/MAPADMIN/$Client/Inbox/ -maxdepth 2 -type f -delete >> log.txt 

このスクリプトは、私の状況に最適ですが、私は0%失われたファイルを持っていることは100%を確認する必要があります。 このようなものをテストした人がいるか、時間が長いか、それを改善するのに役立つ人がいますか?

ありがとうございました!

+0

コピー中にソースファイルも変更される可能性があります。ソースファイルをループし、各繰り返しで現在のファイルのmd5sumを計算し、2つのコピー先フォルダにコピーしてチェックしますそのmd5sumは変更されなかった。そうでない場合は、ソースファイルを削除してください。削除した場合は、2つのコピーを削除しますが、コピー元は削除しないでください。それはあなたの問題を解決するだろうか? –

答えて

0

私はこのように更新しました。 3ヶ月残っており、上記のスクリプトを使用して0%の損失でほぼ50,000のファイルが移動されました。

他の人にとって参考になることを願っています。

0

この場合、rsyncを使用することをお勧めします。

files=(*.*) 

if [ "$files" != "*.*" ] 
then 

for file in "${files[@]}"; do 

     cp "/$RootPath/$1/Outbox/$folder$file" /$RootPath/MAPADMIN/$1/Outbox/$folder 
     mv "/$RootPath/$1/Outbox/$folder$file" /$RootPath/Backup/$1/Outbox/$folder 
done 
fi 

私はそのディレクトリにすべてのフォルダを探していて、その後、すべてのフォルダに、私はすべてのファイルを探していると私は一つずつつもりです:

rsync -arv /$RootPath/MAPADMIN/$Client/Inbox/ $RootPath/$Client/Inbox 2>&1 >> log.txt 
rsync -arv /$RootPath/MAPADMIN/$Client/Inbox/ /$RootPath/Backup/$Client/Inbox 2>&1 >> log.txt 
find /$RootPath/MAPADMIN/$Client/Inbox/ -maxdepth 2 -type f -delete >> log.txt 
+0

スクリプトに基づいた例を教えてください。 – Theodor

関連する問題