web-dev-qa-db-ja.com

tarballを抽出するときにターゲットディレクトリを作成する

mkdir -pのようなターゲットディレクトリを作成することはできますか。tarコマンド内に存在しないターゲットディレクトリを定義できます。tarがディレクトリを作成します。

tar -C /target/dirを使用して出力をディレクトリにリダイレクトできることはわかっていますが、ターゲットディレクトリが存在しない場合、これは機能しません。

29
wulfgarpro
mkdir -p /target/dir && tar -C /target/dir
42
V for V
_tar -xvf bash.html_node.tar.gz --one-top-level
_

Tarコマンドのmanページから

_--one-top-level[=DIR]_

    すべてのファイルを[〜#〜] dir [〜#〜]に抽出するか、引数なしで使用する場合は、アーカイブのベース名で指定されたサブディレクトリに抽出します(_--auto-compress_)。

-----テスト

テスト1

_tar zxvf ../aaa.tgz --one-top-level
aaa/
aaa/222
aaa/111

tree aaa
aaa/
├── 111
└── 222
_

// tgz名がアーカイブのroot_dirと同じである場合、他の影響はありません

テスト2

_mv ../aaa.tgz ../bbb.tgz

tar zxvf ../bbb.tgz --one-top-level
aaa/
aaa/222
aaa/111

tree bbb
bbb
└── aaa
    ├── 111
    └── 222
_

// tgz名がアーカイブのroot_dirと同じでない場合は、最上位のディレクトリを作成します

18

これは私にはもっと理にかなっています:mkdir -p /create/folder && tar -zxf haroopad-v0.13.0_x64.tar.gz -C /create/testfolder

mkdirはフォルダを作成しますが、-pスイッチ。 &&を使用すると、2番目のコマンドを実行できます。典型的なtarスイッチを使用しましたが、最後に-Cは、ディレクトリを変更し、必要な場所に抽出するために使用されます。

参照: extract-files-contained-in-archive-tar-gz-to-new-directory-named-archive

6
Gr4cchus

作成するパスがわからない場合...
tarファイルから必要なパスを取得し、作成します...

for P in \`tar tvf tarfile.tar |tr -s [:space:] |cut -d' ' -f6\`; do  
    C=\`echo "${P: -1}"\`  #get the last character  
    if [ $C = '/' ]; then  
        echo "Found directory: $P"  
        mkdir -p $P  
    fi  
done
1
ckroger