Linuxの複数のディレクトリから複数のファイルをrsync

Linuxの複数のディレクトリから複数のファイルをrsync

BRO IDSの複数のlog.gzファイルとともに、日付別に名前が付けられた複数のディレクトリ(例:2017-09-05)があります。各ディレクトリに移動し、名前で特定のlog.gzファイルのみをインポートし、rsyncを使用してリモートシステムに送信しようとします。ログファイルは次のとおりです。dns.00:00:00-01:00:00.log.gzこれを行うためにワイルドカードを使用しようとしています。

前任者:rsync -avh --ignore-existing -e ssh -r /home/data/logs/2017-09-* {dns,http}.*.log.gz / [email protected]:/home/pnlogs/

これは近いですが、各フォルダ内のすべてのファイルをコピーしてインポートしようとすると無視されます。ただhttp ログと dns ログが例に示されています。これを1行で実行できますか?もっと良い方法がありますか?

理想的には、転送中にファイルを元のディレクトリに保存したいと思います。たとえば、元のコマンドでは、ディレクトリはリモートシステムに残ります。これは組織にとって良いことです。興味深いことに、このコマンドは今月の3日、4日、5日のログではなく、2017-09-01および2017-09-02のHTTPおよびDNSログをコピーします。

月/年の変更についてどのように調整しますか?これはスクリプトに含まれ、毎月$date(例えば2017-10など)に変更したくないですか?

働いた。すべての助けをいただきありがとうございます。rsync -avhR $(date +????-??-??)/{dns,http,conn}.*.log.gz [email protected]:/home/pnlogs/

ベストアンサー1

あなたの命令を見てみましょう

rsync -avh --ignore-existing -e ssh -r /home/data/logs/2017-09-*  {dns,http}.*.log.gz / [email protected]:/home/pnlogs/

コレクションソースは、次の4つのパスに一致するすべてのファイルです(再帰は有効ですが-r実際には実行されます)。-a

  • /home/data/logs/2017-09-*
  • dns.*.log.gz
  • http.*.log.gz
  • /

最後に、rsyncコマンドがすべてをコピーしようとしていることを確認します。

コピーしたいのは、YYYY-MM-DDフォルダ内のすべてのDNSおよびHTTPログファイルであり、ディレクトリ構造を維持しているようです。

cd /home/data/logs &&
rsync -avhR 2017-09-*/{dns,http}.*.log.gz [email protected]:/home/pnlogs/

--ignore-existingあなたがいなければ私はそれを使用しないでしょう本当に強いなぜこれをしたいのかを見てください。 (このフラグはrsync部分転送が再開されるのを防ぎます。そうしないと--partial問題になる可能性があります。)

-r使用中であり、-aこのアーカイブモードにはすでに再帰が含まれているため、必要はありません。しかし、あなたの要件を正しく解釈すると、とにかく再帰はありません。

この-Rフラグは、rsyncターゲットのソースツリーで相対パスを維持するように指示します。私はcd便利な出発点にコマンドを置いた。そうしないと、/home/data/logsターゲットパスにも含まれることになります。( ... )実行されている残りのスクリプトにディレクトリの変更が適用されないようにするには、それらをすべて括弧で囲みます。

おすすめ記事