フォルダから複数のtarファイルとそのファイル名を抽出します。

フォルダから複数のtarファイルとそのファイル名を抽出します。

こんにちは、1.tar 2.tar 3.tar..etcなどのtarファイルが複数あり、それらをそれぞれのフォルダ(例:1.tarを1というフォルダに抽出するなど)に抽出したいと思います。私の試用版は次のとおりです。 :

   for f in *; do
   tar -xvf "$f.tar" --xform='s|^|$f/|S';
   done

期待どおりに動作しません。どうすればいいですか?

ベストアンサー1

次の2つの理由で機能しません。

  1. 一重引用符内に式を使用しているため、--transform拡張は無効になります。
  2. globの使用方法が間違っていることは、ファイル名全体が一致することをfor f in *; do tar -xvf "$f.tar"...意味します。たとえば、拡張すると誤った結果が発生する可能性が高くなります。*1.tar$f.tar1.tar.tarNo such file or directory

次のようにしてみてください。

for f in *.tar
do
tar -tf  "$f" --xform="s|^|${f%.*}/|S" --show-transformed-names
done

出力が満足な場合は、dry-runコマンドを次のように置き換えます。

tar -xf  "$f" --xform="s|^|${f%.*}/|S"

この特別なケースでは簡単に実行できますが、

for f in *.tar; do tar -xf "$f" --one-top-level; done

おすすめ記事