rsync を安全で便利に使うために、
- どのファイルがコピーされるかを事前に出力し、コピーしてよいか確認する
- 間違って上書きしたり別の場所に rsync しようとしていたときに気づける
- source/target の差分チェックを走らせる必要があるので、ある程度の時間はかかってしまうが、間違った場所へコピーを始めてしまうリスクを考えると全然お得
- これをするには
-nvオプションを付けると良いのだが、毎回付けるのが億劫
-h --info=progress2をつけて実行する- コピーの速度と進捗を表示するので、コピーに時間が思ったよりかかりそうなときに気づける
- これらは付けてほぼ損がないオプションなので常につけてしまえばよい
ようにしたいと思ったことがないだろうか。自分はよくある。
というわけでそれをやってくれる簡単なラッパスクリプトを書いた。
以下のスクリプトを ssync (safe rsync という意味で命名) という名前で保存して、rsync の代わりに実行するとよい。
#!/bin/bash
if [[ $1 == -V ]]; then
# If the first option is -V, skip showing the file list
shift
else
ASKCOPY=1
fi
if [[ -n "$ASKCOPY" ]]; then
printf "\033[34m"
rsync -vnh $@
printf "\033[0m"
fi
command="rsync -h --info=progress2 $@"
announce="Commencing \`${command}\`"
cols=$(tput cols 2>/dev/null)
if [[ $? != 0 ]]; then
# tput failed somehow
cols=80
else
announce_len=${#announce}
cols=$((cols<announce_len ? cols : announce_len))
fi
sep=$(for ((i=1; i<=cols; i++)); do printf "-"; done)
echo ""
echo $sep
echo $announce
echo $sep
if [[ -n "$ASKCOPY" ]]; then
echo ""
read -n1 -p "ok? (y/N): " answer
if [[ "$answer" != [yY] ]]; then
echo ""
echo "Aborted"
exit 1
fi
fi
echo ""
echo "Running..."
$command
echo "Done."このコマンドを何度も使っていると、実行するかを毎回聞かれるのが面倒になることもある。そういう時は、 ssync の部分を rsync に置き換えるか、ssync -V ... のように最初のオプションとして -V をつけることで確認をスキップできる。