次の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}
\
.
答え2
あなたのすべての提案に感謝します。私はその提案をすべて考慮してこのコマンドを作成しました。私の場合、これは私にとって必要な命令でした。
for f in /mydirectory/*.zip; do
n=$(echo ${f##*/} | cut -c1-30);
unzip -d /mydirectory/$n $f;
done
- すべてのzipファイルを繰り返します。
- 各zipファイル(ファイル名のみ、サイズやパスなどの追加情報はありません)をエコーし、最初の30文字だけをエコーしてn変数に保存します。
- 次に、各zipファイルの内容を新しいディレクトリに抽出します(n変数を使用)。
私の場合は、別のディレクトリで実行されているスクリプトに入れました。