どのように'tar'コマンドを使用して別のディレクトリにファイルを抽出するには?

私は思った tar archive.tar /users/mylocation うまくいくだろうが、そうではない。どうすればいいのだろうか?

現在のディレクトリとは異なるディレクトリにアーカイブを抽出するには、次のようにします。 -C、または --directory、tarオプション、のように

tar -xf archive.tar -C /target/directory

ターゲットディレクトリは、そのコマンドを実行する前に存在している必要があることに注意してくださ mkdir /target/directory).

を読む マニュアルページ (コマンド: man tar)他の選択のため。

Tarballに変更したいディレクトリ名が既に含まれている場合は、次のように追加します --strip-components=1 オプション:

tar xf archive.tar -C /target/directory --strip-components=1

以前の回答とコメントを組み合わせる:

内容を抽出し、見つからない場合はターゲットディレクトリを作成するには:

mkdir -p /target/directory && tar xf archive.tar -C /target/directory

Zip内のルート(最初のレベル)ディレクトリを抽出して削除するには

mkdir -p /target/directory && tar xf archive.tar -C /target/directory --strip-components=1

別のオプションは、--one-top-levelを使用することです。 これにより、元のファイル名に基づいて自動的にディレクトリが作成されます。

tar zxvf filename.tgz --one-top-level

さらに、必要に応じて、独自のものを指定すると、tarが自動的に作成します。

tar zxvf filename.tgz --one-top-level=new_directory

私が抽出に関連して興味深いと感じたのは、アーカイブをどのように作成したかによって異なりますが、この例を参照してください

cd /tmpmkdir foldertouch folder/file.txt

あなたがするとき tar -zcvf folder.tar.gz folder すべてが期待どおりです=あなたがそれを解凍すると、それはuntarredされます(あなたがそれを削除した場合、フォルダが作成されます)。 /tmp/folder/.

しかし、tarを次のように作成するときは、次のようにします tar -zcvf tmp-folder.tar.gz /tmp/folder そして、あなたはそれを/tmpフォルダに解凍すると、結果は次のようになります /tmp/tmp/folder ディレクトリ! このような場合には、それをuntarする必要があります / - tar -xf tmp-folder.tar.gz -C /

@Ujjwal Sing:確かに、tarのmanページはそれほど役に立ちません。 "-C DIR"は"ディレクトリDIRへの変更"として記述されています。 さらに悪いことに:"tar-C mydir xfアーカイブ。tar"は動作しませんが、"tar xf archive。tar-C mydir"はありません。

また、’-C,–directory DIR\n change to directory DIRは、出力ディレクトリをDIRに変更する(DIRが存在しない場合は失敗する)`と記述する必要があります。 ありがとう@Mich。 @Bryan_Larsenの答えも参照してください。

@PatMorin公平を期すために、あなたが使用している引数呼び出し規約を理解すれば、それは理にかなっています。 また、`tar xfC archiveを実行することもできます。tar mydir’または’tar-C mydir-xfアーカイブ。タール それは、物事を壊す伝統的なスタイルとGNUスタイルのフラグを混在させるだけです。… 正直なところ期待されています。 従来のフラグは、すべて最初の引数として1つのblobとして渡されます。 彼らが最初でなければ、彼らが働くことを期待することはできません。 (私は、はい、それはとにかくそれを解釈することが可能です-私のポイントは、それが標準ではなく、上記と超えているだろうということです)