同じコンピュータの異なるパスにあるAとBという2つのフォルダがあります。フォルダAに新しいファイルを追加すると、自動的にフォルダBにコピーしたいと思います。
私のファイル:
/auto/std1/nat1/A
/auto/std2/nat2/B
現在のファイルをコピーするために実行する作業は次のとおりです。
cp -r A B
しかし、私はこのプロセスをバックグラウンドで自動的に実行しA
たいと思いますB
。
質問/質問が追加されました
ファイルをコピーするときは、特定のファイル形式に対して特定のタスクを実行したいと思います。たとえば、zip
フォルダにファイルがある場合は、フォルダのファイルA
に自動的にコピーされます。unzip
B
これは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)