あるディレクトリの中の検査データを圧縮して、同じネットワーク内のNASに保管するようにしました。
シェルスクリプトで実装したのですが、そのファイル自体はシステムのどこにでも置けるようにしたかったので、ターゲットのファイルまでは絶対パスで記述していました。
しかし、絶対パスで圧縮をかけると、ファイルの展開時に/からのツリー構造がまるっと出力されるのでした。
調べてみると、展開時に必要な部分のみを取り出すような方法もあるようなのですが、面倒くさそうだったので、以下のように実装しました。
#backup.sh
#! /bin/sh
cd /home/foo/targetDir;
zip /network/nas/$(date +"%Y%m%d_%H%M").zip ./targetFile
#$(date +"%Y%m%d_%H%M").zip は 20170804_1122.zipのように現在時をファイル名とする
何か、ルートからのツリー構造を含めないように絶対パスで圧縮指定をする方法はあるのかな?
ちなみにZIPよりtar玉にしてしまった方が、サイズは半分くらいになったのですが、Windowsからデータにアクセスする人もいるのでzip圧縮を選びました。
あとは
crontab -e
を実行して
0 19 * * * /home/foo/bin/backup.sh
で毎日19時にバックアップを実行するようにしました。
余談だが、sambaを介してのNASへのアクセスはユーザー毎の権限が定められている様子。
つまり、
sudo crontab -e
などとして、システム(root)の権限で動くcronによってシェルスクリプトを実行すると、NASにアクセスができない。
あくまで、ログイン権限のある個別ユーザーでのアクセスをする必要がある。
$ crontab -e
で実行する事が重要です。