Debian で Microsoft の「Robocopy」などのファイルをコピーする方法は?

Debian で Microsoft の「Robocopy」などのファイルをコピーする方法は?

私はメディアセンターに移動する前に、メディア/ダウンロードセンターの一部をWindowsからLinuxに移行しようとしました。これでRaspbianでRaspberry Piを設定したので、移動する前にここでさまざまな作業を試してみましょう。

私のメディアセンターからいくつかのファイルをダウンロードしており、そのファイルをあるディレクトリから別のディレクトリにコピーする必要があります。最も基本的なLinuxコマンドを使用してこの部分を実行できますが、実際の問題は、ファイルがコピーされたときにファイルに何が起こるかです。

Windowsには定期的に実行されるバッチスクリプトがあります。 - 「a」から「b」にファイルをコピーし、ログファイルを生成します。 -a プログラムは、ファイルの移動と名前の変更のためにフォルダ "b" を監視します。ログファイルは、スクリプトが同じファイルを再コピーするのを防ぎ、メディアフォルダに重複ファイルが表示されるのを防ぎます。

コードは以下のように表示されます。

ROBOCOPY "location A" "Location B" /NP /M /S /LOG+:c:\batches\Rename.log

Linuxでこれは可能ですか?可能であればどのように達成できますか?

答え1

rsyncはこの種の作業に適しています。名前を変更したり他の操作を行う必要はなく、新しいコンテンツや更新されたコンテンツのみをコピーするだけです。要件に応じて動作を変更するためのさまざまなオプションがあります。

たとえば、

rsync -av /location/a/* /location/b

答え2

Linuxでは何でもできます!

crondを使用して定期的に実行するプロセスを作成し、bashスクリプトを使用してファイルをコピーできます。

2つのディレクトリを作成するとします。

pi@raspberrypi2 ~ $ mkdir tmp
pi@raspberrypi2 ~ $ cd tmp/

pi@raspberrypi2 ~/tmp $ mkdir 1;mkdir 2

次に、ファイルをディレクトリ1に配置します。

pi@raspberrypi2 ~/tmp $ touch 1/file1

次に、次のようにスクリプトを作成します。

はい。単純なbashスクリプト:

#!/bin/bash

for i in $(ls 1/);do
    if [ -e 2/$i ];then
        echo "File already copied to directory 2" >> logfile.log
    else
        cp 1/$i 2/$i
        if [ $? = 0 ];then 
            echo "File $i copied to directory 2" >> logfile.log
        else 
            echo "Error copying file $i to directory 2" >> logfile.log
        fi
    fi
done

ディレクトリ 1 からディレクトリ 2 にファイルをコピーします。また、echoコマンドを使用してメッセージをログファイルに書き込みます。

テスト:

pi@raspberrypi2 ~/tmp $ ls 1/ 2/
1/:
file1

2/:
pi@raspberrypi2 ~/tmp $ bash script.sh
pi@raspberrypi2 ~/tmp $ ls 2/
file1
pi@raspberrypi2 ~/tmp $ cat logfile.log 
File file1 copied to directory 2
pi@raspberrypi2 ~/tmp $ bash script.sh 
pi@raspberrypi2 ~/tmp $ ls 2/
file1
pi@raspberrypi2 ~/tmp $ cat logfile.log 
File file1 copied to directory 2
File already copied to directory 2
pi@raspberrypi2 ~/tmp $ 

その後、crontabにcronjobを挿入して定期的にスクリプトを実行できます。

pi@raspberrypi2 ~/tmp $ crontab -e

# run the script at at 5 a.m every day:
0 5 * * * bash /home/pi/tmp/script.sh

ファイルを保存し、cronjobがインストールされていることを確認してください。

pi@raspberrypi2 ~/tmp $ crontab -l

0 5 * * 1 bash /home/pi/tmp/script.sh

必要に応じてスクリプトを作成できます。この例は始点です。

注:Raspberry Pi A +で実行されているRaspbianでテストされました。 :)

関連情報