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

f:id:IsThisAPen:20180729091301p:plain

POINT

  • Shell Scriptでファイル名一括編集する方法.
  • ファイル名の切り出し・文字列の追加の方法についての解説.

Shell Scriptでファイル名一括編集する方法についてまとめました.

バッチファイルでファイル名を編集する方法は次の記事を参照してください:

ファイル名切り出し

例1:拡張子".txt"のファイルの3〜5文字目を抜き出す① (abcdefg.txt→cde.txt)

#!/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:拡張子".txt"のファイルの3〜5文字目を抜き出す② (abcdefg.txt→cde.txt)

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

ここで,

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


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

ファイル名の文頭に"P-"を,末尾に"-S"を追加する(abc.txt→P-abc-S.txt)

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

ここで,

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


参考記事・文献