シェルスクリプトでファイル名変更
あるディレクトリにあるファイルの名前をシェルスクリプトで一括変更したいと思っています。
旧ファイル名 新ファイル名
apple banana
orange lemon
kiwi melon
strawberry apricot
のように、新旧ファイル名(拡張子を除く)をタブで区切ってfilename.txtというファイルに入れてあります。ごらんの通り新旧ファイル名とも規則的ではありません。拡張子は新旧ともすべて.wavです。
awkもしくはreadでできるかなと思ったのですが、私の力ではできませんでした。お知恵を拝借できれば幸いです。(シェル初心者、使っているのはBシェルです)
投稿日時 - 2007-01-18 05:48:02
こんな感じ?
#!/bin/sh
source='filename.txt'
if [ "x$1" != "x" ]
then
source=$1
fi
while read from to
do
echo "mv ${from}.wav ${to}.wav"
done < $source
確認のため echo で文字列出力するようにしています。
実際に使うなら echo の行を調整するなどしてください。
投稿日時 - 2007-01-18 12:11:28
お礼
できました!ありがとうございました!!
ちなみに
source='filename.txt'
if [ "x$1" != "x" ]
then
source=$1
fi
の部分は、新旧ファイル名を格納してあるファイルを引数として指定できるようにするためですか?つまり、もしコマンド名の後に別のファイル名を引数として指定すれば、そのファイルから新旧ファイル名を読み込む、引数がなければfilename.txtから読み込む、という。
投稿日時 - 2007-01-19 12:11:17
0人が「このQ&Aが役に立った」と投票しています
ベストアンサー以外の回答(1件中 1~1件目)
このファイルから例えば
mv apple.wav banana.wav
のような行を出力するように awk で処理して sh にパイプで食わせるってのもありだと思います.
投稿日時 - 2007-01-18 12:38:07
awk '{print "mv "$2".wav "$1".wav"}' filename.txt | sh
ってことですね!1行でできてしまうんですねー。
理論的にはわかっていたのですが、「shにパイプで食わせる」という基本的な方法を知らず、前に進めずにいました。でもご指摘いただいて調べた結果、できるようになりました。勉強になりました。ありがとうございます。
投稿日時 - 2007-01-19 13:08:07