- ベストアンサー
シェルスクリプトでファイル名変更
あるディレクトリにあるファイルの名前をシェルスクリプトで一括変更したいと思っています。 旧ファイル名 新ファイル名 apple banana orange lemon kiwi melon strawberry apricot のように、新旧ファイル名(拡張子を除く)をタブで区切ってfilename.txtというファイルに入れてあります。ごらんの通り新旧ファイル名とも規則的ではありません。拡張子は新旧ともすべて.wavです。 awkもしくはreadでできるかなと思ったのですが、私の力ではできませんでした。お知恵を拝借できれば幸いです。(シェル初心者、使っているのはBシェルです)
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じ? #!/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 の行を調整するなどしてください。
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
このファイルから例えば mv apple.wav banana.wav のような行を出力するように awk で処理して sh にパイプで食わせるってのもありだと思います.
お礼
awk '{print "mv "$2".wav "$1".wav"}' filename.txt | sh ってことですね!1行でできてしまうんですねー。 理論的にはわかっていたのですが、「shにパイプで食わせる」という基本的な方法を知らず、前に進めずにいました。でもご指摘いただいて調べた結果、できるようになりました。勉強になりました。ありがとうございます。
お礼
できました!ありがとうございました!! ちなみに source='filename.txt' if [ "x$1" != "x" ] then source=$1 fi の部分は、新旧ファイル名を格納してあるファイルを引数として指定できるようにするためですか?つまり、もしコマンド名の後に別のファイル名を引数として指定すれば、そのファイルから新旧ファイル名を読み込む、引数がなければfilename.txtから読み込む、という。