各マウントポイントのバックアップtarファイルを作成しています。
/var
/usr/image
/usr/image/temp
次のようなtarnameを作成しようとしています。
backup_var_date.tar
backup_usr_image_date.tar
backup_usr_image_temp_date.tar
以下のように試しましたが、「mv」は機能しません。 "$i は for ループで呼び出される変数です。"
/bin/tar -cvpzf backup_`echo`mv "$i" "${i//"/"/_}``_`hostname`.`date +%m.%d.%Y`.tar.gz
答え1
奇妙に見えます。
backup_`echo`mv "$i" "${i//"/"/_}``_`hostname`.`date +%m.%d.%Y`.tar.gz
mv
ここに巣を入れたいですかecho
?コマンド代替構文を使用すると、$(...)
ネストが簡単になります。
backup_$(echo $(mv this that))_$(hostname)...
しかし、出力を繰り返すだけで動作する場合は、何も出力してはならないmv
ということは言うまでもなく、ここではまだ何の用途も見えません。echo
mv
キャンセルしmv
てビルドファイル名を使用すると、変数のすべての${var//\//_}
インスタンスが変更されます。/
_
したがって、ループ全体に対して次のように見えることがあります。
for path in /var /usr/image /usr/image/temp ; do
x=$(path#/} # remove leading / if there is one
tarfile=backup_${x//\//_}_$(hostname)_$(date +%Y-%m-%d).tar.gz
tar -cvpzf "$tarfile" "$path"
done
注:日付形式をからに変更したのは、後者がソートをより簡単にする05-17-2017
ためです。2017-05-17
先行を取り除くことはとにかく私たちが望むものに/
変わるので重複しますが、_
この方法がより構造化されていると思います。
答え2
脱出するときは注意が必要です。使用:
"${i//\//_}"