ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者: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にかえたいのです。
なので、困っていました。
この回答へのお礼この回答にお礼をつける(質問者のみ)
 
最新から表示回答順に表示良回答のみ表示