zip名パターンに基づいてzipファイルをディレクトリに抽出します。

zip名パターンに基づいてzipファイルをディレクトリに抽出します。

次のzipファイルがあります。

PLP_633555_2015-03-04_01-12-01.zip
PLP_634562_2004-03-02_02-15-07_UBIC.zip
PLP_563462_2008-05-02_01-21-03_UBIC_STOC.zip

次の形式を使用して、各zipを適切なディレクトリに抽出する必要があります(デフォルトでは最初の30文字のみが必要です)。

PLP_633555_2015-03-04_01-12-01
PLP_634562_2004-03-02_02-15-07
PLP_563462_2008-05-02_01-21-03

以下は現在持っているコマンドです。これは機能しますが、2番目のzipファイル(PLP_634562_2004-03-02_02-15-07_UBIC.zip)に固有のものです。

for f in /PLP*.zip; do n=$(echo $f | cut -f 1-5 -d '_'); unzip -d $n $f;done

zipファイルの最初の30文字だけを読み、それに基づいてディレクトリを作成するように変更したいと思います。これにより、今後の新しいzipファイル命名形式が機能できるようになります。

コマンドのn変数部分をこれに変更してみました。

n=$(echo ${f:0:30}); 

しかし、それはうまくいきませんでした。私はLinuxバッシュを使用しています。

ベストアンサー1

sed最初の30文字を取得できます。

sed 's|\(.\{30\}\).*|\1|'

代わりにループcutで使用してください。for

この交換の履歴は、交換したsedユーザー間の一致です。 30個の単一文字を計算します(エスケープを含む)。\( \)\1{30}\.

おすすめ記事