2004年1月12日月曜日

Debian GNU/Linux, bashシェルスクリプトでファイル名の一括変更

 ファイルをまとめてリネームするためのシェルスクリプトpowercp(in bash) 

2002-11-28版

既存のファイル file に対して mv file hogefile を実行するのみ。 ワイルドカードを使うと、複数個のファイルをいっぺんにリネームできる。
ただ現行ファイル名の頭に文字列をくっつけるだけにすぎない。 まだあまり柔軟性はない。
しかし、リネーム+他のディレクトリへの移動の際には上のhogeのところを特に /home/username/hoge のように書けばいい(あまり便利ではないが)。

ソース

#!/bin/bash
for h in $*
do
  if [ ! -f "$h" ]; then
    echo '***以下のファイルは本当に存在しますか?'
    echo $h
    exit 1
  fi
done

for j in "$*"
do
  echo '***以下のファイルについて処理を行います'
  echo $j
done

echo ''
echo '***文字列を入れてください'
read i

echo ''
echo '***以下のコマンドを実行します'
for j in $@
do
  echo mv $j $i$j
done

echo ''
echo '***よろしいですか? (y/n)'
read k
if [ "$k" = "y" -o "$k" = "Y" ]; then
  for j in $@
  do
    mv -vi $j $i$j
  done
else
  echo '***中断します'
fi

実行例

$ powercp 0*.mpg
***以下のファイルについて処理を行います
01.mpg 02.mpg 03.mpg 04.mpg 05.mpg 06.mpg 07.mpg 08.mpg 09.mpg

***文字列を入れてください
2p_not_so_good

***以下のコマンドを実行します
mv 01.mpg 2p_not_so_good01.mpg
mv 02.mpg 2p_not_so_good02.mpg
mv 03.mpg 2p_not_so_good03.mpg
mv 04.mpg 2p_not_so_good04.mpg
mv 05.mpg 2p_not_so_good05.mpg
mv 06.mpg 2p_not_so_good06.mpg
mv 07.mpg 2p_not_so_good07.mpg
mv 08.mpg 2p_not_so_good08.mpg
mv 09.mpg 2p_not_so_good09.mpg

***よろしいですか? (y/n)
y
`01.mpg' -> `2p_not_so_good01.mpg'
`02.mpg' -> `2p_not_so_good02.mpg'
`03.mpg' -> `2p_not_so_good03.mpg'
`04.mpg' -> `2p_not_so_good04.mpg'
`05.mpg' -> `2p_not_so_good05.mpg'
`06.mpg' -> `2p_not_so_good06.mpg'
`07.mpg' -> `2p_not_so_good07.mpg'
`08.mpg' -> `2p_not_so_good08.mpg'
`09.mpg' -> `2p_not_so_good09.mpg'