再帰的にファイル名やディレクトリ名にある半角スペースをアンダースコア ( _ )で置き換えるスクリプト: Linux & Mac 対応

シェルスクリプトで作業を自動化しようとするとき、ファイル名やディレクトリ名に半角スペースが入っていると、エラーとなります。
この半角スペースを全部アンダースコア( _ ) で置き換えてあげたいと思いました。
それも、カレントディレクトリだけではなく、再帰的にサブディレクトリにあるものもすべてです。
やっぱり楽したいですから…。特に画像解析をやる場合、DICOMのディレクトリ構造は、かなり奥深くにいくので、再帰的にいけると楽になります。

スマートでないかもしれませんが、以下のようなスクリプトを書いてみました。

replace-space-underscore.shのダウンロード(右クリックで名前をつけて保存)

思考過程を書いていこうと思います。

続きを読む

bashのtips: 直前の引数を利用したいときは !$ もしくは Esc + .

私はこんな作業をよくします。

  • あるファイルをディレクトリAにコピー
  • ディレクトリAに移動

この際

$ cp something /path/to/A
$ cd /path/to/A

とするわけですが、この /path/to/A を2回うつのはめんどくさいので、簡単な方法がないかを調べてみると、

!$

という特殊変数があることがわかりました。
しかし、しょっちゅう忘れるので、覚え方を考えてみました。

bashでは、履歴を知りたいときに、!を使います。
たとえば

$ history

でコマンド履歴を調べ、その1457番目のコマンドを再度実行したいときは

$ !1457

とすればいいわけですね。

で、$ですが、正規表現において、$は「行の最後」を意味します。

この2つを組み合わせれば

「履歴において一番最後のもの」

と考えれば、 !$

は覚えやすいなと思いました。

自分の思考過程を備忘録として書いておきます。

<29/July/2020 追記>
コメントに Esc + . でもいけるというご指摘をいただきました。

これは、viの動作をイメージすると覚えやすいですね。
vi は コマンドモードで、. は繰り返しになるわけですので、
bashでEscでviのコマンドモードに入ったような感じになって、.で前回の引数の繰り返しというイメージで覚えたらいけそうです。