- ベストアンサー
Shellでファイル名を抜き出して変更
お疲れ様です。 いつもお世話になっています。 よろしくお願いします。 現在Shellで、下記の流れのプログラムを制作しています。 ------ 1.zipを一時ディレクトリに展開(unzip) 2.もとのzip名(aaaa-bbcccc-dddd-YYYYMMDD.zip)からXXXXX-bb-YYYYMMDDというフォルダを作成 3.一時ディレクトリのファイルをmv ------ ごく簡単なものだとは思うのですが、2.のフォルダを作成のところで悩んでいます。 cutコマンドが近い気がするのですが、これはファイルの中身を抜き出すコマンドのようで、うまく使えません。 フォルダ名の一部分を抜き出して、新しいフォルダ名としてつくるにはどうすればよいのでしょうか。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 勘違いしましたw sedで...と思ったら#2の方の回答があるので,せっかくだからawkで :-) # awkじゃなくnawkでないとsubが使えない処理系もあり。 --- ここから #!/bin/sh for fileName in *.zip do dirName=`echo ${fileName%.zip} | awk ' BEGIN { FS = "-" } { sub(/....$/, "", $2) print "XXXXX-" $2 "-" $4 }'` mkdir ${dirName} done --- ここまで
その他の回答 (2)
- Tacosan
- ベストアンサー率23% (3656/15482)
aaaa-bbcccc-dddd-YYYYMMDD.zip における aaaa, cccc, dddd にもよるんだけど ・使うシェル変数を増やす ・あきらめて sed は思い付くなぁ. 前者でいくなら, bb の部分を覚えておく変数と最後の YYYYMMDD の部分を覚えておく変数を作って最後に合体させる. 後者でいくなら mv 一時ディレクトリ `echo $fileName | sed -e 's/^[^-]*-\(..\)[^-]*-[^-]*-\(.*\)\.zip/\1\2/'` のような感じ. sed の正規表現があってるかどうかはしらん (けど \(~\) じゃなくて (~) にするくらいのはず).
- eicha_2007
- ベストアンサー率14% (23/154)
2.に関しては ---- ここから #!/bin/sh for fileName in *.zip do mkdir ${fileName%.zip} done ---- ここまで みたいなやり方では駄目ですか?
補足
回答ありがとうございます。 .zipを落とすだけでなく、最初のaaaaをXXXXにかえたいのです。 なので、困っていました。