Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5727

Vim を使ったファイル整理術

$
0
0

はじめに

画像などのファイル名を一括で変更したい、という場面に何度も直面してきました。
便利なソフトウェアや、シェルスクリプト(Windowsだとバッチファイル)を作成しても良いのですが、Vim でもサクッと似たようなことができます。

「Vim はこんな使い方もできる」と知っておくと、意外と重宝するので記事にしました。

Vim を使ったファイル整理術(基礎)

ファイル一覧を取得

フォルダ内にあるjpgファイルを取得するには、下記のコマンドを使います。
putコマンドは空行が発生するので、globalコマンドで空行を削除します。

:put!=expand('*.jpg')|g/^$/d

mv コマンドのひな形を作成

ファイルリストからコマンドのひな形を作成します。

:%s/\(.*\)$/mv "\1""PREFIX_\1"/ge

リネーム処理の実行

Windows の場合、エンコードによりファイル名が正しく処理できない場合があります。
fileencoding を cp932 に変更してバッチ処理に渡します。

# Unix
:w!sh

# Windows
:set fenc=cp932
:w!cmd

Vim を使ったファイル整理術(応用)

前述したリネーム処理を応用して、連番をつけたファイル名に一括変換する処理を実行します。

ファイルリストに対して、コマンドのひな形を作成します。
globalコマンドは重複させられないため、ファイルリスト取得とは別で実行します。

:g/^/| s/.*/\="mv \"".submatch(0)."\" PREFIX_".line('.')/ | s/_\(\d\{1}\)$/_0\1/e| s/_\(\d\{2}\)$/_0\1/e | s/_\(\d\{3}\)$/_\1.jpg/e

処理について補足します。

まず g/^/で全ての行を対象に処理をおこないます。

sedコマンドで、オリジナルファイル名(submatch(0))、変更後のファイル名(PREFIX_000.jpg)を置換するコマンドを作成します。
オリジナルファイル名は空白スペースを含む可能性があるため、ダブルクォーテーションで囲みます。
line('.')は現在行を取得する vimscript の関数です。

取得した行数は zero supply されてないため、1 ~ 9 行目に対してゼロを補完します。(2個目の sed
3個目の sedで 1 ~ 99 行目対して、ゼロを補完しています。
最後の sedで拡張子 jpg を補完します。この処理は 1 ~ 999 行目に実行します。

これで mvコマンドのひな形が完成したので、:w !shで実行すれば完成です。

おわりに

世の中には便利なソフトウェアがたくさんあるので、必ずしも Vim でやる必要はないと思います。

一方で、 Vim エディタとしての機能と、シェルを実行する機能を持ち合わせているため、がっつりシェルスクリプトを書くのはしんどいようなケースで役に立つことがあります。

Vim はシンプルでありながら、強力な機能を持っているのでお気に入りのエディタのひとつです。
もし他にもおすすめの Vim 活用方法があれば、シェアしていただけると幸いです。


Viewing all articles
Browse latest Browse all 5727

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>