こんにちは、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つの理由で機能しません。
- 一重引用符内に式を使用しているため、
--transform
拡張は無効になります。 - globの使用方法が間違っていることは、ファイル名全体が一致することを
for f in *; do tar -xvf "$f.tar"...
意味します。たとえば、拡張すると誤った結果が発生する可能性が高くなります。*
1.tar
$f.tar
1.tar.tar
No 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