shはブレース展開できないので Ubuntu の cron で注意

ALL
スポンサーリンク

先日の記事のブレース展開は、記事タイトルに bash とある通り bashだけで有効で、sh では無効ですが、そのために Ubuntu の cron で失敗しました。

bash でコマンドへ同じような引数を繰り返して指定する場合にブレース展開を使う: パソコン鳥のブログ

bashだと、次のように書くと、

rsync -av --delete --exclude={swapfile,/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found,/snap/*} / /mnt/backup/

{}内が展開されて、次のように –exclude= が列挙されますが、

rsync -av --delete --exclude=swapfile --exclude=/dev/* --exclude=/proc/* --exclude=/sys/* --exclude=/tmp/* --exclude=/run/* --exclude=/mnt/* --exclude=/media/* --exclude=/lost+found --exclude=/snap/* / /mnt/backup/

sh だと展開されないままです。

rsync -av --delete --exclude={swapfile,/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found,/snap/*} / /mnt/backup/

Ubuntu の cron はデフォルトシェルが sh ですが、cronで上記のように rsync を実行しました。
すると、–exclude の {}内が展開されなかったため除外指定が効かず、/mnt/ も rsync の対象になってマウント先の全ファイルもrsyncでコピーして、rsync先のディスクが DiskFull になってしまいました・・

コメント