yamazのRails日記 このページをアンテナに追加 RSSフィード

2009-11-22ディレクトリ配下の特定のファイルだけアーカイブする方法

自分用メモ絶対他にうまい方法があるはずなので,教えてください><;

やりたいこと.


/logs/yyyymmdd/hostname/*campaign_log*というファイルだけtarにしたい.ただし該当ファイル数が多すぎてshellでは取り扱えない.


戦略

  1. 空のtarファイルを作る
  2. 該当ファイル名を抽出してxargsとtarの追記オプション(-r)で処理

作業メモ

tarファイルを作る
% touch hoe
% tar cvf tmp.tar hoe #(A)
tarファイルに追記
 % ls -d /logs/200911* |xargs -t -i  find {} -name '*campaign_log*' > files.txt # (B)
 % cat files.txt |xargs tar fr ~/tmp.tar # (C)

解説

  1. (B)の代わりにfind /logs -name '200911*campaign_log*'としないのは余計なディレクトリを走査したくないからls -d /logs/200911* で該当ディレクトリを絞る.
  2. (B)のxargsの -t -i コマンド途中(つまり{}の部分)にコマンド引数を渡すためのオプション
  3. この方法だと(A)のコマンドの空tarファイル作成に使ったダミーファイルが残ります(´・ω・`)

znzznz 2009/11/23 10:20 GNU tar だと
-T, --files-from=FILE get names to extract or create from FILE
というオプションがあるようなので、
find -name '*log*' | tar -T - -cvf log.tar
みたいな感じでどうでしょうか?

sarumarusarumaru 2009/11/23 12:43 find の -depth option ではだめでしょうか

sarumarusarumaru 2009/11/23 23:20 なんとなく
echo /logs/yyyymmdd/hostname/*campaign_log* | xargs tar cf ~/tmp.tar
でいける気もしてきました。echo が built-in command なら。
ただしファイルの並び順は find とは変わってくるかも。

YamileYamile 2012/05/25 15:10 Wow! That's a really neat aswner!

uuzgkdynkliuuzgkdynkli 2012/05/27 11:07 RRT6cJ , [url=http://mndjwpvtwkal.com/]mndjwpvtwkal[/url], [link=http://zalqpgwrybdq.com/]zalqpgwrybdq[/link], http://ufghrfmbizha.com/

yurguefogzyurguefogz 2012/05/28 17:29 63MmRt <a href="http://qdjkpnatdpck.com/">qdjkpnatdpck</a>

rqaygtaigrqaygtaig 2012/05/28 22:36 rUHERY , [url=http://vuodkkylmiij.com/]vuodkkylmiij[/url], [link=http://egdtpfqyoqnq.com/]egdtpfqyoqnq[/link], http://vprklondxufm.com/

ゲスト



トラックバック - http://rubyist.g.hatena.ne.jp/yamaz/20091122