1.動機:mv
で毎回パス書くの、地味にめんどくない?
ターミナル上でファイルを移動するとき、毎回こんなふうにパスを打ってませんか?
# 1. 対象ファイルを移動
mv file.txt ~/Library/CloudStorage/Dropbox/Documents/Reports
# 2. ディレクトリ移動
cd ~/Library/CloudStorage/Dropbox/Documents/Reports
もちろんこれで済む話ではあるんですが、移動先のパスを毎回書くのが面倒ですよね。
ディレクトリ、深いし、長いし、覚えてないし(aliasとかに登録してたりするので)。
ここで「GUI的な『カット→移動→ペースト』みたいな操作をターミナルでもやろう」。そう思って、「カット&ペースト風スクリプト」を作ってみました。
2.作ったスクリプト:vcut.sh
& vpaste.sh
発想は単純で、~/.via
という一時ディレクトリを用意してファイル移動を一旦そのディレクトリを経由するようにします。
vcut.sh
(=~/.via
に移動)
#!/bin/bash
VIA_DIR="$HOME/.via"
mkdir -p "$VIA_DIR"
if [ $# -eq 0 ]; then
echo "Usage: vcut.sh <file1> [file2] ..."
exit 1
fi
for filepath in "$@"; do
if [ -e "$filepath" ]; then
mv -iv "$filepath" "$VIA_DIR"/
else
echo "Not found: $filepath"
fi
done
vpaste.sh
(=~/.via
から移動)
#!/bin/bash
VIA_DIR="$HOME/.via"
DEST_DIR="$(pwd)"
if [ -z "$(ls -A "$VIA_DIR" 2>/dev/null)" ]; then
echo "No files to paste."
exit 0
fi
mv -iv "$VIA_DIR"/* "$DEST_DIR"/
3.使い方
# 1. 対象ファイルをカット
vcut.sh file.txt
# 2. ディレクトリ移動
cd ~/Library/CloudStorage/Dropbox/Documents/Reports/
# 3. ペースト
vpaste.sh
これで、移動先のパスを2回も書く必要がなくなります。
4.感想
使い方だけみるとコマンドの回数が最初の2回から3回に増えてて、逆に面倒に見えます。
しかし、mv
コマンドの行き先指定が必要なくなっています。しかもvcut.sh
とvpaste.sh
の間は1発で移動しなくても複数のcd
を行ったり、alias等でショートカットしたりしても問題ないです。
いつもmv
で指が止まっていたのが改善されて、思っていた以上に小さなストレスが軽減されて快適でした。
ちょっとしたことなんですが、毎日のCLI作業がほんの少し軽くなる感じがします。
GUI操作に慣れた人で「ターミナルでもこういうのがあれば助かる」って方にお役に立てればいいな、と思ってます。