bash ディレクトリ内ファイル圧縮

運用でディレクトリ内のファイルを全て圧縮することってありますよね?

僕はありました。今日ありました。いきなり言われました。雪のせいだ。

そんな雪のせいな運用対応のメモです。

メモする程のことでもないけど

スポンサーリンク

こんな感じのディレクトリ構成でAAA〜CCC以下のファイルをまとめて圧縮したい場合

/home/user/data/ |--AAA
| |--aaa.txt
|--BBB
| |--aaa.txt
| |--bbb.txt
| |--vvv.txt
|--CCC
| |--aaa.txt
| |--bbb.txt
| |--ccc.txt
| |--ddd.txt
| |--eee.txt
| |--yyy.txt

こんな感じ ついでに消します。

files="/home/user/data/*"
fileary=()
dirary=()
filedate=`date +%Y%m%d`
for filepath in $files; do
  if [ -f $filepath ] ; then
    dirary+=("$filepath")
  fi
done

for i in ${dirary[@]}; do
  cd $i
  tar cf - *.txt | gzip -c > ${filedate}.tar.gz
  rm -f *.txt
done

こんな感じになる

/home/user/data/ |--AAA
| |--20160118.tar.gz
|--BBB
| |--20160118.tar.gz
|--CCC
| |--20160118.tar.gz

ついでにこんな感じで7日経ったら消しています

rm -f `find /home/user/data/ -mtime +7 -name "*.*"`

このdataディレクトリは滅多に見ないけど、とりあえず残しておかないといけないので、圧縮しないとただの容量喰いなやつなのです。

ディレクトリによっては数GBとか喰われる。

とりあえずすっきりしました。