28
25

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 5 years have passed since last update.

連番付きのファイルを、順序を維持したまま連番を振り直して、一括でリネーム

Last updated at Posted at 2014-11-17

#状況
次のような名前のファイルが沢山ある。

old-0.png
old-1.png
...
old-187.png

これらを一括で次のようにリネームしたい。

new0001.png
new0002.png
...
new0188.png

#方法
##最終的にリネームを実行するコマンド

ls *.png | sort -t - -k 2 -n | xargs seqrename new

##ファイルのソート
このケースではlsの結果をそのままパイプで渡すと順番がおかしくなるので、あらかじめソートをかけてやる必要がある。
ハイフンの後に続く数字を数値とみなしてソートする。

ls *.png | sort -t - -k 2 -n
  • -t - は'-'でフィールドを区切る
  • -k 2 は2番目のフィールドをソートに用いる
  • -n はフィールドを数値に変換してソートする

##連番リネームを行うシェルスクリプト
1番目の引数をプリフィックスとし、2番目以降の引数に渡されたファイルに連番を振ってリネームする。
拡張子は元のまま維持する。
-t オプションを付けると実際にリネームしないで結果をプレビューする。

#!/bin/bash
# seqrename

opt_test=false
while getopts t opt; do
  case $opt in 
    t) opt_test=true 
      ;;
  esac
done

shift $((OPTIND - 1))
prefix=$1
shift

i=1
for oldname in $*; do
  ext="${oldname##*.}"
  newname=$prefix`printf "%04d" $i`.$ext
  if $opt_test; then
    echo $oldname "->" $newname
  else
    mv $oldname $newname
  fi
  i=`expr $i + 1`
done
28
25
2

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
28
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?