31
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

え?ファイル名をリネームしたいって?

#そんなの朝飯前。コマンドで一発だよね。

#標準的なリネームコマンド
rename s/aaa/bbb/ ./*
#centosはこう
rename aaa bbb *

$ a.txt  bbb.txt  kkk.txt

お礼は要らないよ。
#え?先頭に連番がつけたいんだって?い、いいよ?

#ここからechoで確認する。実行するときは | sh を最後につける。
#cat -n で番号を付けてそれを利用する。
ls | cat -n | while read n f ; do echo "mv -n ${f} ${n}_${f}"; done 

mv -n a.txt 1_a.txt
mv -n bbb.txt 2_bbb.txt
mv -n kkk.txt 3_kkk.txt

どや?楽勝でしょ。
#え?え?先頭に0で埋めた4桁の数字を付けたかったって?

#printf で桁数指定で出力する。
ls | cat -n | while read n f ; do echo "mv -n ${f} $(printf %04d $n)_${f}"; done;

mv -n 1.txt 0001_1.txt
mv -n 10.txt 0002_10.txt
mv -n 11.txt 0003_11.txt
mv -n 2.txt 0004_2.txt

出来たよ。え?違う?

#1.txtの次は2.txtが自然だって?ああナチュラルソート順ね。

#"える"ではなく"いち",vでバージョンソート,
 ls -1vp | cat -n | while read n f ; do echo "mv -n ${f} $(printf %04d $n)_${f}"; done;

mv -n 1.txt 0001_1.txt
mv -n 2.txt 0002_2.txt
mv -n 10.txt 0003_10.txt
mv -n 11.txt 0004_11.txt
mv -n oh my file.txt 0005_oh my file.txt

できたよ?

#え、上手く行かない?ファイル名にスペースが入ってるのね。。

 ls -1vp | grep -v "/$" | cat -n | while read n f ; do echo "mv -n  '"${f}"' '$(printf %04d $n)_${f}'"; done;

mv -n  '1.txt' '0001_1.txt'
mv -n  '2.txt' '0002_2.txt'
mv -n  '10.txt' '0003_10.txt'
mv -n  '11.txt' '0004_11.txt'
mv -n  'oh my file.txt' '0005_oh my file.txt'

これでいいんじゃない?

#え、やっぱり時間順だって?

ls -1ptr | grep -v "/$" | cat -n | while read n f; do echo "mv -n '"${f}"' '"$(printf %04d $n).${f#*.}"'"; done
mv -n '2.txt' '0001.txt'
mv -n '11.txt' '0002.txt'
mv -n '10.txt' '0003.txt'
mv -n '1.txt' '0004.txt'
mv -n 'oh my file.txt' '0005.txt'

ど、どや?
え、自分でやりたい?

#コマンドより安全にリネームできるツールを作ったからそっちを使ってくれー。

リネム
https://rinemu.com/

はい、ということで、ファイルAPIとjavascriptで作ったリネームツールです。
リネームしたものはZIP圧縮されてダウンロードするので、うっかりコマンド上書きされる心配がないです。

これは nuxt.js で出来ているので、また次回の記事で紹介したいと思いますー。

#おわり
簡単と思ってたら意外と手こずって、スタックオーバーフローを漁ることになり、
それでも中途半端にしか載っていないので、まとめてみました。
ツールを作る羽目にならないように、次はサクッと決めたいですねー。

参考

https://stackoverflow.com/questions/3886295/how-do-i-list-one-filename-per-output-line-in-linux
https://stackoverflow.com/questions/22948042/bash-sort-like-windows-natural-sort-order

31
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?