More from: find

ディスクフルとは・・・・・(汗)

サーバの自動処理で作成しているファイルが一部しか出来ていないとの連絡が来た。
慌てて調べてみると処理途中のファイルを置いているディスクが満杯・・・・・・
幸い元ファイルは残っていたので、古いファイルを削除してディスクを空けてから再度作成処理を走らせて事なきを得た。
古いファイルは自動で削除するようにしてあったが、予想以上にファイルが大きくなっているので、ディスクを圧迫していたようだ。
なので保管期間を短くするようにスクリプトを書き換えた。
明日の朝チェックしてみて問題無いようだったら当面はそのままにしておこう。

今のスクリプト内では日付を取り込んでファイル名に付けているので、古いファイルを削除するにも該当の日付さえ取れれば良いことになる。
そこで下記のようにして2ヶ月前の日付を取り込むようにした。
file-name=`/bin/date –date ‘2months ago’ +%Y%m%d`
ここで”%Y%m%d”というフォーマットは
20120913
となるので(2012年9月13日の場合)、上記の場合”file-name”には”20120713″と2ヶ月前の日付の文字列が入ることになる。
スクリプトではこの後で
/bin/rm $file-name
のようにして2ヶ月前の日付のファイルを削除している(もちろんファイルの場所のpathの設定は必須だけどこの例では省略)。

ファイル名に日付を入れていない場合には、findコマンドで2ヶ月(60日)前に作られたファイルを探して削除するようにすればOKかな?
例えば
/bin/rm `find (PATH)/ -ctime +60 -type f -print`
のようにすれば60日以前に作成されたファイルが削除出来るはず。

←クリックしてくれると嬉しいです。

スクリプトは書いたけど・・・・・・・・

データの移動の為に過去に転送した時以降に更新されたファイルをアーカイブするスクリプトを書いた。
きちんと動作することは確認できたのだけど、いざ実行するとかなり処理時間がかかってしまう、、、、、、、
これはfindコマンドが検索結果を毎回lhaに渡し、その度にlhaがアーカイブファイルのバックアップを取るためと思われる。
lhaに一括でファイル名を渡すことが出来ればバックアップを取らずに処理されるので、もっと処理速度を上げられる筈なのだがその手段が今のところ分からない。
なので、今日はこのままサーバに処理をさせたままにして引き上げることにした。
明日の朝には処理が終わっていることを期待しよう(汗)。

←クリックしてくれると嬉しいです。

正確には-fぢゃなかった(汗)

昨日からfindコマンドのオプションについて書いているけど、”-f”というオプションではなく、”-type”オプションに”f”というパラメータを渡すことで、ファイルのみの検索が可能になるということだった。
自分では-typeオプションを使っていながら、ここの記事に書くときに取り違えていたという・・・・・・・・
先の記事の使用例にもちゃんと”-type f”と書いているにも関わらずタイトルには”-f”オプションって書いている。
なにを勘違いして書いたかなぁ?

←クリックしてくれると嬉しいです。

“-f”オプションで

昨夜書いたけど、findでファイルのみを検索する場合は”-f”オプションを付けることで解決した。
ついでに”-exec”オプションでlhaを実行させて検索されたファイルだけをアーカイブすることも出来た。
これで差分のアーカイブが簡単に出来そうな気がしてきたよ。
ただなぁ、検索対象のディレクトリ(というかファイルシステム)が結構あるんだよなぁ、、、、、、
しかも転送と受け側での展開は未だに手動で実行するので、完全自動と言うわけにはいかないのが辛いとこだ(汗)。

結局
find . -mtime -3 -and -not -name \*.zip -not -name \*.lzh -not -name \*.bak -type f -exec lha a hoge.lzh {} \;
のようなコマンドを実行して、3日前以降に更新されたファイルで拡張子がzipとlzhとbak以外のファイルをhoge.lzhに固めるようにした。

←クリックしてくれると嬉しいです。

“-f”オプションだったのか・・・・・・・

findコマンドの結果にディレクトリが出てくるのは除外したいと先の記事に書いたけど、”-f”オプションで”ファイルのみ”の検索が出来るらしい。
今は自宅のLinuxPCの電源を落としてしまったのですぐには検証できないが、明日職場で早速試してみよう。
うまくいけば差分を抽出したい全てのディレクトリに対するスクリプトを書くことが出来るかも(汗)。
そうなれば随分と楽になるなぁ。

←クリックしてくれると嬉しいです。

差分を取るのがちと面倒

先日から行っているデータの転送は大きなデータを纏めて転送するのは今晩でひとまず終わりそう。
なので、今日からは前回転送後に更新されたり追加されたりしたファイルを抽出してアーカイブする作業を始めた。
更新されたファイルを探すにはfindコマンドを使えば出来る。
#find . -mtime -2 -print (カレントディレクトリ以下で二日以内に更新されたファイル及びディレクトリ名を出力する)
ところが上記のようなfindの出力をそのままlha等に渡すとディレクトリが更新されている場合にその中のファイルが全て対象になってしまうので、今のところfindの出力をテキストに吐き出してから手作業でファイル名を抜き出してlhaで圧縮している。
これに意外と手間がかかるので、なにか良い方法が無いかと思案中。
上手い方法が見つかればスクリプトでも書いて自動で処理させるんだけどなぁ、、、、、、、

←クリックしてくれると嬉しいです。