ファイルがディレクトリにコピーされると、自動的にコマンドを実行する

ファイルがディレクトリにコピーされると、自動的にコマンドを実行する

同じコンピュータの異なるパスにあるAとBという2つのフォルダがあります。フォルダAに新しいファイルを追加すると、自動的にフォルダBにコピーしたいと思います。

私のファイル:

/auto/std1/nat1/A
/auto/std2/nat2/B

現在のファイルをコピーするために実行する作業は次のとおりです。

cp -r A B

しかし、私はこのプロセスをバックグラウンドで自動的に実行しAたいと思いますB

質問/質問が追加されました

ファイルをコピーするときは、特定のファイル形式に対して特定のタスクを実行したいと思います。たとえば、zipフォルダにファイルがある場合は、フォルダのファイルAに自動的にコピーされます。unzipB

これはCentOS 7`システムにあります。

ベストアンサー1

rsyncボーナスの質問に従って、下記のシェルスクリプトのコマンドの下に次の行を追加してください。私はこれをコメントしましたが、正式にここに私の答えに追加します。

    find /auto/std2/nat2/B -name '*.zip' -exec sh -c 'unzip -d `dirname {}` {}' ';'

rsyncこれにより、フォルダから/auto/std2/nat2/Aコピーされたすべてのzipファイルの解凍が処理されます。/auto/std2/nat2/B



rsyncすでにインストールしている場合は、cronを実行してrsyncファイルミラーを管理していますか?

スクリプトの作成myrsyncscript.sh

実行可能にすることを忘れないでください。chmod 700 myrsyncscript.sh

#!/bin/sh

LOCKFILE=/tmp/.hiddenrsync.lock

if [ -e $LOCKFILE ]
        then
        echo "Lockfile exists, process currently running."
        echo "If no processes exist, remove $LOCKFILE to clear."
        echo "Exiting..."
#        mailx -s "Rsync Lock - Lock File found" [email protected] <<+
#Lockfile exists, process currently running.
#If no processes exist, remove $LOCKFILE to clear.
#+
        exit
fi

touch $LOCKFILE
timestamp=`date +%Y-%m-%d::%H:%M:%s`
echo "Process started at: $timestamp" >> $LOCKFILE

## Run Rsync if no Lockfile
rsync -a --no-compress /auto/std1/nat1/A /auto/std2/nat2/B


echo "Task Finished, removing lock file now at `date +%Y-%m-%d::%H:%M:%s`"
rm $LOCKFILE

オプション分析:

-a is for archive, which preserves ownership, permissions etc.
--no-compress as there's no lack of bandwidth between local devices

考慮できる他のオプションman rsync:

- 既存の無視

シンクのファイル更新をスキップする

- 更新

これにより、rsyncがターゲットに存在し、ソースファイルよりも変更時間が最新のすべてのファイルをスキップします。 (既存のファイルの変更時間がソースファイルの変更時間と同じでサイズが異なる場合は更新されます。)これは、シンボリックリンクやその他の特殊ファイルのコピーには影響しません。さらに、送信者と受信者の間のファイル形式の違いは、オブジェクトの日付に関係なく常に更新されるほど重要であると見なされます。つまり、ソースにディレクトリがあり、ターゲットにファイルがある場合、タイムスタンプに関係なく転送が行われます。

このオプションは除外ではなく転送ルールなので、ファイルのリストに入るデータと削除には影響しません。単に受信者が転送を要求するファイルを制限します。

次のようにcronに追加し、最も快適であると感じる周波数に周波数を設定します。

cronを開き、crontab -e次を追加します。

### Every 5 minutes
*/5 * * * * /path/to/my/script/myrsyncscript.sh > /path/to/my/logfile 2>&1 

# * * * * *  command to execute
 # │ │ │ │ │
 # │ │ │ │ │
 # │ │ │ │ └───── day of week (0 - 6) (0 to 6 are Sunday to Saturday, or use names; 7 is Sunday, the same as 0)
 # │ │ │ └────────── month (1 - 12)
 # │ │ └─────────────── day of month (1 - 31)
 # │ └──────────────────── hour (0 - 23)
 # └───────────────────────── min (0 - 59)

おすすめ記事