renameコマンドでワイルドカードを用いたファイル名変換を試す

2021年11月2日

ubuntuでスクリーンショットを取ると、デフォルトだとピクチャフォルダに以下の名称で保存してくれます。

Screenshot from 西暦-年-月(例:2021-05-22) 時間-分-秒(例12-34-33).png

名称がちょっと長いのはいいとして、所々に空白があるのがすごく気になります。これらの画像をブログで使用する際、扱いづらくて仕方がないです。

そこで、名称の変更をしようとしましたが、そこで、えらい苦労をしたので、備忘録を兼ねて記録に残します。

スポンサーリンク

名称の変更に挑戦

名称の変更には、mvコマンドをすぐに思い出します。一つのファイルであれば、このコマンドで何の問題もなく変更可能です。

mv 'Screenshot from 2021-09-09 14-08-26.png' sudoku_1.png

しかし、大量のファイルだと、とてもやっていられません。そこで、ワイルドカードを使ってみようとしましたが、なぜかエラーになってしまいます。

mv 'Screenshot from 2021-09-09'*.png sudoku_*.png
mv: 宛先の 'sudoku_*.png' はディレクトリではありません

変なエラーが出ました。ウググ、スキルのない60爺では対応できないです。

ファイル名の変更をググってみたら、mvコマンドではなく renameコマンドなるものがあるというので、そちらでやってみようということになりました。


renameコマンドでファイル名変更

renameインストール

早々に次のコマンドを叩いてみました。

rename 'Screenshot from 2021-09-09 ' sudoku_ 'Screenshot from 2021-09-09 '*.png
コマンド 'rename' が見つかりません。次の方法でインストールできます:
sudo apt install rename

標準ではインストールされていないんですね。そこで、最後の行で指定されたコマンドで rename をインストールしました。

何ら問題なく、renameがインストールされました。

ワイルドカードを用いたファイル名変更

それでは、ファイル名を変更してみます。

rename 'Screenshot from 2021-09-09 ' sudoku_ 'Screenshot from 2021-09-09 '*.png
Illegal octal digit '9' at (user-supplied code), at end of line
Illegal octal digit '9' at (user-supplied code), at end of line

ウムム、またまた訳の分からないエラー発生です。ファイル名の中に空白が多数あるのが問題ではと考え、これを '_’ に変更してみます。

find . -name "* *" | rename 's/ /_/g'

以下のように、空白が _ に変換されました。

【変更前】

ls
'Screenshot from 2021-05-22 12-34-33.png'
'Screenshot from 2021-09-09 12-17-01.png'
'Screenshot from 2021-09-09 12-18-43.png'
'Screenshot from 2021-09-09 12-18-48.png'

【変更後】

ls
Screenshot_from_2021-05-22_12-34-33.png
Screenshot_from_2021-09-09_12-17-01.png
Screenshot_from_2021-09-09_12-18-43.png
Screenshot_from_2021-09-09_12-18-48.png

この後、入力した renameコマンドが、またもや、エラーになってしまいました。

rename Screenshot_from_2021-09-09_ sudoku_ Screenshot_from_2021-09-09_*.png
Misplaced _ in number at (eval 8) line 1.
Illegal octal digit '9' at (user-supplied code), at end of line
Illegal octal digit '9' at (user-supplied code), at end of line
rename Screenshot_from_2021-09-09 sudoku Screenshot_from_2021-09-09*.png
Illegal octal digit '9' at (user-supplied code), at end of line
Illegal octal digit '9' at (user-supplied code), at end of line
rename Screenshot_from_2021-09-09_ sudoku Screenshot_from_2021-09-09_*.png
Misplaced _ in number at (eval 8) line 1.
Illegal octal digit '9' at (user-supplied code), at end of line
Illegal octal digit '9' at (user-supplied code), at end of line

正規表現を正しく!

調べてみたところ、このページに耳寄りな情報がありました。

このページの英語部分を訳してみると以下の通りです。

日本語訳

Windowsでは、構文は次のとおりです。

rename search replace file1 [file2 file3…]

しかし、Ubuntuでは、「検索」と「置換」の部分はいわゆる"正規表現"となります。即ち、構文は次のようになります。

rename 's/search/replace/;' file1 [file2 file3…]

このことから、renameコマンドは windows と ubuntu で書き方が違うのだということがわかりました。60爺が入力したのは、windows 向けの構文だったようです。

そこで、上記にあるように ubuntu 向けのコマンドを打ってみたところ、見事にファイル名を変換できました。

rename 's/Screenshot_from_2021-09-09_/sudoku/;' Screenshot_from_2021-09-09_*.png

【変更前】

ls
Screenshot_from_2021-09-09_12-17-01.png
Screenshot_from_2021-09-09_12-18-43.png
Screenshot_from_2021-09-09_12-18-48.png

【変更後】

ls
sudoku12-17-01.png
sudoku12-18-43.png
sudoku12-18-48.png
スポンサーリンク

このコマンドなら空白があってもファイル変換できそうです。次回ファイル変換を実施する際に試してみようと思います。

Ubuntu をインストール後、色々いじっています。他の記事もご覧になってください。

参考
windowsでの名称変更はこちらの記事を

スポンサーリンク
この記事を書いた人

60爺

60路を越え、RaspberryPi と出会い、その関係でブログ開設(2017/2~)となりました。始めてみると、コツコツやるのが性に合ってしまい、漢字の記事から家の補修・将棋・windows10関係・別名・言い方などジャンルを拡大して今に至ってます。まだまだ、元気なので新たな話題を見つけて皆様に提供できればと思っています。「プロフィールはこちら

ubuntu

Posted by 60爺