
あるディレクトリにあるファイルの名前をシェルスクリプトで一括変更したいと思っています。
旧ファイル名 新ファイル名
apple banana
orange lemon
kiwi melon
strawberry apricot
のように、新旧ファイル名(拡張子を除く)をタブで区切ってfilename.txtというファイルに入れてあります。ごらんの通り新旧ファイル名とも規則的ではありません。拡張子は新旧ともすべて.wavです。
awkもしくはreadでできるかなと思ったのですが、私の力ではできませんでした。お知恵を拝借できれば幸いです。(シェル初心者、使っているのはBシェルです)
No.1ベストアンサー
- 回答日時:
こんな感じ?
#!/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 の行を調整するなどしてください。
できました!ありがとうございました!!
ちなみに
source='filename.txt'
if [ "x$1" != "x" ]
then
source=$1
fi
の部分は、新旧ファイル名を格納してあるファイルを引数として指定できるようにするためですか?つまり、もしコマンド名の後に別のファイル名を引数として指定すれば、そのファイルから新旧ファイル名を読み込む、引数がなければfilename.txtから読み込む、という。
No.2
- 回答日時:
このファイルから例えば
mv apple.wav banana.wav
のような行を出力するように awk で処理して sh にパイプで食わせるってのもありだと思います.
awk '{print "mv "$2".wav "$1".wav"}' filename.txt | sh
ってことですね!1行でできてしまうんですねー。
理論的にはわかっていたのですが、「shにパイプで食わせる」という基本的な方法を知らず、前に進めずにいました。でもご指摘いただいて調べた結果、できるようになりました。勉強になりました。ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Winmerge ファイルの中身は同じ...
-
ファイルの先頭行を全て削除したい
-
バッチファイルで変数の中身を...
-
onedriveの中身を削除したらパ...
-
ショートカットアイコンと、元...
-
ファイルの単位
-
コマンドプロンプトによるフォ...
-
emlをtxtに変換するには?
-
教えてください!困ってます。
-
外字ファイル、eudc.tte と e...
-
同期センターのマークが出てま...
-
クラリスワークスのファイルを...
-
office365 ファイルを削除したい
-
ODBCエラー「admin」によってロ...
-
突然ですみません、教えて欲し...
-
BAKファイルを非表示にする方法
-
フォルダ内の一覧を印刷するには?
-
GnuPGの複合化をパスフレーズ手...
-
Excelで保存時間とPCの時間があ...
-
バッチファイルでのif文分岐
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Winmerge ファイルの中身は同じ...
-
onedriveの中身を削除したらパ...
-
教えてください!困ってます。
-
emlをtxtに変換するには?
-
コマンドプロンプトによるフォ...
-
office365 ファイルを削除したい
-
mrl→midファイルへ
-
バッチファイルで変数の中身を...
-
IPテレビのプレイリストだとお...
-
ファイルの単位
-
ファイルの先頭行を全て削除したい
-
ショートカットアイコンと、元...
-
VScodeでjarファイルを開く方法
-
macのdmgファイル(動画)をMP4...
-
Windows10 フォルダ内の自動並...
-
クラリスワークスのファイルを...
-
外字ファイル、eudc.tte と e...
-
ファイル操作(削除など…)の履...
-
outlookuの添付ファイルが開け...
-
Excelで保存時間とPCの時間があ...
おすすめ情報