質問 |
||
| 質問者:nyalio | Shellでファイル名を抜き出して変更 | |
|---|---|---|
困り度:
|
お疲れ様です。 いつもお世話になっています。 よろしくお願いします。 現在Shellで、下記の流れのプログラムを制作しています。 ------ 1.zipを一時ディレクトリに展開(unzip) 2.もとのzip名(aaaa-bbcccc-dddd-YYYYMMDD.zip)からXXXXX-bb-YYYYMMDDというフォルダを作成 3.一時ディレクトリのファイルをmv ------ ごく簡単なものだとは思うのですが、2.のフォルダを作成のところで悩んでいます。 cutコマンドが近い気がするのですが、これはファイルの中身を抜き出すコマンドのようで、うまく使えません。 フォルダ名の一部分を抜き出して、新しいフォルダ名としてつくるにはどうすればよいのでしょうか。 よろしくお願いします。 |
|
質問投稿日時:08/04/08 17:10 質問番号:3932581 |
||
回答良回答20pt |
|
| 回答者:eicha_2007 | #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 --- ここまで |
|---|---|
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/04/08 19:37 回答番号:No.3 |
|
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答良回答10pt |
|
| 回答者:Tacosan | aaaa-bbcccc-dddd-YYYYMMDD.zip における aaaa, cccc, dddd にもよるんだけど ・使うシェル変数を増やす ・あきらめて sed は思い付くなぁ. 前者でいくなら, bb の部分を覚えておく変数と最後の YYYYMMDD の部分を覚えておく変数を作って最後に合体させる. 後者でいくなら mv 一時ディレクトリ `echo $fileName | sed -e 's/^[^-]*-\(..\)[^-]*-[^-]*-\(.*\)\.zip/\1\2/'` のような感じ. sed の正規表現があってるかどうかはしらん (けど \(〜\) じゃなくて (〜) にするくらいのはず). |
|---|---|
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/04/08 18:40 回答番号:No.2 |
|
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答 |
|
| 回答者:eicha_2007 | 2.に関しては ---- ここから #!/bin/sh for fileName in *.zip do mkdir ${fileName%.zip} done ---- ここまで みたいなやり方では駄目ですか? |
|---|---|
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/04/08 17:35 回答番号:No.1 |
|
| この回答への補足 | 回答ありがとうございます。 .zipを落とすだけでなく、最初のaaaaをXXXXにかえたいのです。 なので、困っていました。 |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |