シェルスクリプトでファイル名変更

解決済みの質問

シェルスクリプトでファイル名変更

あるディレクトリにあるファイルの名前をシェルスクリプトで一括変更したいと思っています。

旧ファイル名 新ファイル名
apple   banana
orange   lemon
kiwi      melon
strawberry apricot

のように、新旧ファイル名(拡張子を除く)をタブで区切ってfilename.txtというファイルに入れてあります。ごらんの通り新旧ファイル名とも規則的ではありません。拡張子は新旧ともすべて.wavです。

awkもしくはreadでできるかなと思ったのですが、私の力ではできませんでした。お知恵を拝借できれば幸いです。(シェル初心者、使っているのはBシェルです)

投稿日時 - 2007-01-18 05:48:02

連想キーワード:

QNo.2675122

困ってます

質問者が選んだベストアンサー

こんな感じ?

#!/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

ANo.1

0人が「このQ&Aが役に立った」と投票しています

[  前へ  |  次へ ]

ベストアンサー以外の回答(1件中 1~1件目)

ANo.2

このファイルから例えば
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

PR

お礼投稿と補足投稿が便利になりました![ 詳細 ]

OKWaveのオススメ

教えて弁護士さん!

お金の悩みQ&A特集はこちら

【教えてプロポーズ!】

結婚・プロポーズのQ&A特集はこちら

お部屋探しの賃貸情報はCHINTAI

マチから探せる新しいお部屋探し!