読者です 読者をやめる 読者になる 読者になる

Shell Scriptでのファイル名一括編集

Shell Script

以前の記事のShell Script版を書こうと思ったのですが,
こちらは結構まとまった記事があるようです(参考記事).

これらの記事を参考に,バッチファイルの記事と対応させたShell Scriptの例を作ってみます.

Shell Scriptの例

ファイル名切り出し

拡張子が".txt"であるファイルの3文字目から5文字目を抜き出す例を2つ.

例1
#!/bin/sh
dir=作業ディレクトリのpath
cd $dir
for file in *.txt
do
    After=`echo $file | cut -c 3-5`
    mv "${file}" "${After}.txt"
done

ここで,

  1. $変数, ${変数}:変数の値参照
  2. $(コマンド), `コマンド`:コマンド置換
  3. ファイルを上書きする際に問い合わせるようにするには "mv -i" とします.


例2
#!/bin/sh
dir=作業ディレクトリのpath
cd $dir
for file in *.txt
do
    After="${file:2:3}"
    expansion="${file##*.}"
    mv "${file}" "${After}.${expansion}"
done

ここで,

  1. ${変数:数字1:数字2}:変数の"数字1"より後の"数字2"文字を出力.
  2. ${変数##ワード}:変数の頭から"ワード"にマッチする部分を取り除いた文字列を出力
    (最大マッチ,#に変えれば最小マッチ)

文頭/末尾への文字列付加

ファイル名の文頭に"P-"を,末尾に"-S"を追加する例.

#!/bin/sh
Prefix=P-
Suffix=-S
dir=作業ディレクトリのpath
cd $dir
for file in *.txt
do
    filename="${file%.*}"
    expansion="${file##*.}"
    mv "${file}" "${Prefix}${filename}${Suffix}.${expansion}"
done

ここで,

  1. ${変数%ワード}:変数末尾から"ワード"にマッチする部分を取り除いた文字列を出力
    (最小マッチ,%%に変えれば最大マッチ)
  2. ${変数##ワード}:変数の頭から"ワード"にマッチする部分を取り除いた文字列を出力
    (最大マッチ,#に変えれば最小マッチ)