昨年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メソッドとカスタム関数の概要、それぞれ。