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


25

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

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


4
それが不可能な場合は、常にシェルエイリアスを作成できます。
n0pe

回答:


38
mkdir -p /target/dir && tar -C /target/dir

3
スプーンフィーディングなし、まっすぐにそしてポイントに。
アマドマルティネス

10
マイナーな変更の提案:mkdir -p /target/dir && tar -C $_
マークメルビル

@MarkMelvilleは、$ _がここで何をすべきかを説明します
Suhayb

@Suhayb $_は、前のコマンドの最後の引数に展開されるBashの特別なパラメーターです。
ConceptRat

13
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と異なる場合、トップレベルのディレクトリを作成します


3
GNU tarが必要ですか?Macのデフォルトのbsd tarにはこのオプションはありません。
カーティスヤロップ

1
はい、これはより明確に言及されるべきです。
kcrisman

5

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

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

参照:アーカイブtarに含まれるファイルの抽出gzから新しいディレクトリの名前付きアーカイブ


2
ディレクトリがすでに存在する場合、-pスイッチはエラーをスローしません。
デビッド

@Davidは、先頭に/create存在しないディレクトリも作成します。つまり、存在しない場合は作成します 。
アントニオペレス

1

作成するパスがわからない場合...
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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.