Linuxでファイルをコピー・移動するときの簡略記法

概要

システム開発をしているとLinux上などでシェルコマンドを使う場面に遭遇することがあります。
しかし、所詮スクリプト、所詮コマンドラインという扱いをされがちな上に、慣れないと何を書いてるのかわかりにくいこともあり、実は便利な小技があっても気付かれずにいたりします。
今回は日常でそこそこ使う頻度が高いけれども、意外と認知されていない便利な小技を紹介します。

例えば、あるログファイル(File_2022-06-01.log)のバックアップ(File_2022-06-01.log.backup)を取っておこうとして以下のコマンドを打ったとします。

このように、元のファイル名に.backupを付けたいだけの場合などは、以下のようにFile_2022-06-01.logを一度だけ書くように簡略化できます。

日付や時刻が入っているようなファイルなどは類似した名前のファイルも多く、タブ補完を使ってもファイル名の打ち込みが手間ですので、この書き方を使うと効率良くコマンドを実行できます。

詳細

上記の簡単化はコマンドライン内で使っている{,}で実現しており、ブレース展開と呼ばれています。近年人気のあるZshもブレース展開を利用できますが、この記事ではBashを前提としています。

ブレース展開はブレース{}の中に展開したい文字列をコンマ,で区切って並べます。例えば、文字AとBを展開したい場合は{A,B}と記述します。文字をただ展開するだけでは大した意味はありませんが、文字列の中にブレース展開を入れることで、周辺の文字列を引き連れたまま展開されるようになります。例えば、123{A,B}456というブレース展開を含んだ文字列は、123A456と123B456という文字列に展開されます。

先ほどのcpコマンドで用いたブレース展開を抜粋すると{,.backup}となっていますが、この表現を展開すると、一つ目は空の文字列で、もう一つが.backupとなります。したがって、File_2022-06-01.log{,.backup}という記述はFile_2022-06-01.logとFile_2022-06-01.log.backupに展開されます。冒頭のcpコマンドの簡単化は、このような仕組みで動いていました。

もちろん、バックアップ以外にも、以下のように長いファイル名の途中一部を変える場合にも使えます。

まとめ

以上、Bashのブレース展開を利用して、ファイルの移動・コピーの記述を簡単化する方法をご紹介しました。
シェルは少し高度なことをやろうとすると取っつきにくいところがありますが、環境の制限からどうしてもシェルを使わざるを得ず、そうなると便利機能を知っていた方がいい場面があったりします。そういう場面によく遭遇する方はシェルの便利機能を意識的に探してみると良いかと思います。

おまけ

おまけとして、自分で定義した簡単な便利関数を載せておきます。
cdの後にlsをすぐに打つことは多いと思いますので、そのコマンドを一つにまとめた関数です。cl ディレクトリと打つと、ディレクトリ移動した先でlsをしてくれます。.bashrcなどに追記しておくと少し便利になります。

最近の記事

  • 関連記事
  • おすすめ記事
  • 特集記事

アーカイブ

カテゴリー

PAGE TOP