SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 社員募集 ...

【linux】見つけて、圧縮して、移動したい

問題

あるディレクトリの中にあるログファイルたちの中で、

一定期間以上古いログファイルを探して、

圧縮して、

所定のディレクトリへ移動したい。

答え

古いファイルを見つけるには以下で。

find /xxx/yyy -name "*.log" -mtime +14

指定のディレクトリの深い階層を探さない方がよかったら以下で。

find /xxx/yyy -maxdepth 1 -name "*.log" -mtime +14

しかもあるパターンのファイル名は除外したかったら以下で。

find /xxx/yyy -maxdepth 1 -name "*.log" ! -name "abc*.log" -mtime +14

見つけたファイルに対して、圧縮と移動の2つのことをしたかったら、複数コマンドが必要になりそうなので、sh -c にコマンドの文字列を渡すことを考える。

find で見つけたファイルを1つずつ処理するには xargs がいいでしょう。

find /xxx/yyy -name "*.log" -mtime +14 | xargs -I {} sh -c '圧縮と移動'

圧縮と移動は例えば以下のようにできる。

find /xxx/yyy -name "*.log" -mtime +14 | xargs -I {} sh -c 'gzip {} && mv {}.gz /aaa/bbb'

圧縮元のファイルは何か別で処理するなど残しておく必要がある場合。

find /xxx/yyy -name "*.log" -mtime +14 | xargs -I {} sh -c 'gzip -c {} > {}.gz && mv {}.gz /aaa/bbb'

(フルパスで渡ってくる {} をうまく使ったつもり)

関連するメモ

コメント