複数のtgzファイルを部分ファイル名を含む別々のフォルダに抽出するには?

複数のtgzファイルを部分ファイル名を含む別々のフォルダに抽出するには?

Linux bashシェルでは、私のファイルは次のようになります。

xyz_a.tgz      xyz_b.tgz      xyz_c.tgz

各ファイルを別々のフォルダに抽出したいと思います。

a b c

私はこれを試みます:

$ for file in xyz_*.tgz ;do tar -xzf $file -C $file --strip -component=1;done

しかし、それは詰まった。助けてください?

ベストアンサー1

$ for file in xyz_*.tgz; do
  dir="${file/.tgz}";
  dir="${dir/xyz_}";
  echo mkdir -p "$dir";
  echo tar -C "$dir" xfz "$file";
done
mkdir -p a
tar -C a xfz xyz_a.tgz
mkdir -p b
tar -C b xfz xyz_b.tgz
mkdir -p c
tar -C c xfz xyz_c.tgz

(読みやすくするために改行を追加しました。そのまま実行するか、1行にマージできるようにセミコロンを残しました。)

これを行う1つの方法のパイロットの例は次の通りである。 2つのbashパターン置換コマンドを使用してサフィックス.tgzとプレフィックスを削除して、ファイル名ごとxyz_に一致するFireory名を抽出します。次に、各ディレクトリが.tgzで終わっていることを確認するコマンドを印刷しますmkdir p。最後に、tar各.tgzファイルを独自のディレクトリに抽出するコマンドを印刷します。

echo実際にこれらのコマンドを実行するには、行を削除します。mkdirtar

おすすめ記事