昨年7月、私はcpコマンドの2つの優れた使用法について書きました。ファイルのバックアップを作成することと、フォルダーのセカンダリコピーを同期することです。
これらの優れたユーティリティを発見したので、必要以上に冗長であることがわかったので、Bashシェルの起動スクリプトでそれらへのショートカットを作成しました。これらのショートカットが他の人に役立つ場合や、エイリアスやシェル関数を十分に理解していないBashユーザーにインスピレーションを与えることができる場合に備えて、これらのショートカットを共有したいと思いました。
フォルダの2番目のコピーの更新–Bashエイリアス
cp
でフォルダの2番目のコピーを更新するための一般的なパターン は:
cp -r -u -v SOURCE-FOLDER DESTINATION-DIRECTORY
ここで、-r
「すべてのファイルにアクセスするフォルダを再帰的に下る」、-u
の略です。 「ターゲットの更新」および-v
の略です 「verbosemode」の略で、SOURCE-FOLDER
は最新の情報を含むフォルダの名前であり、DESTINATION-DIRECTORY
SOURCE-FOLDER
のコピーを含むディレクトリです 同期する必要があります。
-r
を簡単に思い出すことができます フォルダーをコピーするときによく使用するので、オプションです。おそらく、もう少し努力すれば、-v
を思い出すことができます。 、そしてさらに努力して、-u
(「更新」または「同期」または…)
または、Bashのエイリアス機能を使用してcp
を変換することもできます 次のような、より記憶に残るものへのコマンドとオプション:
alias sync='cp -r -u -v'
これを.bash_aliases
に保存すると ホームディレクトリにファイルを保存してから、新しいターミナルセッションを開始します。たとえば、次のようにエイリアスを使用できます。
sync Pictures /media/me/4388-E5FE
ホームディレクトリのPicturesフォルダをUSBドライブの同じバージョンと同期します。
すでにsync
があるかどうかわからない エイリアスが定義されていますか? alias
という単語を入力すると、現在定義されているすべてのエイリアスを一覧表示できます。 ターミナルウィンドウのコマンドプロンプトで。
このように、すぐに使い始めたいですか?ターミナルウィンドウを開き、次のように入力します。
echo "alias sync='cp -r -u -v'" >> ~/.bash_aliases
次に、新しいターミナルウィンドウを起動し、alias
という単語を入力します コマンドプロンプトで。次のように表示されます:
me@mymachine~$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias gvm='sdk'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
alias sync='cp -r -u -v'
me@mymachine:~$
そこにsync
が表示されます エイリアスが定義されています。
バージョン管理されたバックアップの作成–Bash機能
cp
を使用してファイルのバックアップを作成するための一般的なパターン は:
cp --force --backup=numbered WORKING-FILE BACKED-UP-FILE
ここで、-- force
「何があってもコピーを作成する」の略で、 -- backup=numbered
「バックアップの生成を示すために数字を使用する」の略で、WORKING-FILE
は保存したい現在のファイルであり、BACKED-UP-FILE
WORKING-FILE
と同じ名前です 世代情報が追加されます。
cp
のオプションを覚えていることに加えて コマンドの場合は、WORKING-FILE
を繰り返すことも忘れないでください。 もう一度名前を付けます。しかし、Bash関数が次のようにオーバーヘッドを処理できるのに、なぜ繰り返すのでしょうか。
繰り返しますが、これを.bash_aliases
に保存できます ホームディレクトリのファイル。
function backup {
if [ $# -ne 1 ]; then
echo "Usage: $0 filename"
elif [ -f $1 ] ; then
echo "cp --force --backup=numbered $1 $1"
cp --force --backup=numbered $1 $1
else
echo "$0: $1 is not a file"
fi
}
システムに「バックアップ」と呼ばれる他のコマンドがないため、この関数を「バックアップ」と呼びましたが、適切な名前を選択できます。
最初のif
ステートメントは、関数に引数が1つだけ提供されていることを確認します。それ以外の場合は、echo
を使用して正しい使用法を出力します。 コマンド。
elif
ステートメントは、提供された引数がファイルであることを確認し、ファイルである場合は、(逐語的に)2番目のecho
を使用します。 cp
を印刷するには 使用するコマンドを実行します。
単一の引数がファイルでない場合、3番目のecho
その旨のエラーメッセージを出力します。
ホームディレクトリで、backup
を実行すると ファイルcheckCounts.sql
でそのように定義されたコマンド 、backup
checkCounts.sql.~1~
というファイルを作成します 。もう一度実行すると、新しいファイルcheckCounts.sql.~2~
が表示されます。 。
成功!計画どおり、checkCounts.sql
の編集を続けることができます ですが、バックアップを使用してスナップショットを頻繁に作成すると、問題が発生した場合に最新のスナップショットに戻ることができます。
ある時点で、git
の使用を開始することをお勧めします バージョン管理用ですが、backup
上で定義したように、スナップショットを作成する必要があるが、git
の準備ができていない場合は、安価なツールです。 。
結論
前回の記事では、シェルスクリプト、シェル関数、シェルエイリアスを使用することで、反復的なタスクを簡単に合理化できることが多いと約束しました。
ここでは、シェルエイリアスとシェル関数を使用してcp
の同期およびバックアップ機能を合理化する具体的な例を示しました。 指図。これについて詳しく知りたい場合は、上記の2つの記事を確認してください。エイリアスとシェルスクリプトを使用してコマンドラインでキーストロークを保存する方法:同僚のGregとSethが書いたshiftメソッドとカスタム関数の概要、それぞれ。