「tar」コマンドを使用して別のディレクトリにファイルを抽出する方法は?


672

tar archive.tar /users/mylocationうまくいくと思いましたが、うまくいきません。どうやってやるの?


1
また、-C, --directory DIR\n change to directory DIRむしろと記述する必要がありますchange output directory to DIR (will fail if DIR doesn't exist)。@Michに感謝します。@Bryan_Larsenの回答も参照してください。
有効な

1
@Ujjwal Sing:実際、tarのmanページはそれほど役に立ちません。「-C DIR」を「change to directory DIR」と記述しています。さらに悪いことに、「tar -C mydir xf archive.tar」は機能しませんが、「tar xf archive.tar -C mydir」は機能します。
パットモリン

@PatMorin公平を期すために、使用している引数呼び出し規約を理解したら、それは理にかなっています。tar xfC archive.tar mydirまたはを行うこともできますtar -C mydir -xf archive.tar。従来のスタイルのフラグとGNUスタイルのフラグを混在させるだけで、物事を壊します。従来のフラグは、すべて最初の引数として1つのblobとして渡されます。彼らが最初でなければ彼らが働くことを期待できない。(つまり、とにかくそれを解釈することは可能です-私のポイントは、標準ではなく、それ以上であるということです)
ニック・ハートリー

回答:


958

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

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

そのコマンドを実行する前にターゲットディレクトリが存在する必要があることに注意してください(それはによって作成できますmkdir /target/directory)。

他のオプションについては、マニュアルページ(コマンド:)を参照してくださいman tar


パスを削除できますか。つまり、ファイルを取得するだけです
zzapper 14

3
それがより大きなファイルである場合、コマンドを実行すると、動作中に数秒または数分間出力されることはありません。これを修正するには、各ファイルの抽出時にリストする-vフラグ(詳細モード)を追加します。
IQAndreas

これで問題がある場合は--strip-components=1、他の回答からのアドバイスにも注意してください。
DreadPirateShawn


9
すべてのオプションtarが蓄積されたこれらすべての年月の後、出力ディレクトリが存在しない場合作成するオプションがまだないのは驚くべきことではありませんか?
EM0

261

tarballに変更するディレクトリ名が既に含まれている場合は、--strip-components=1オプションを追加することに注意してください。

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

2
ありがとうございました。wget / etcを介したダウンロードには、常に「親」ディレクトリがあります。これは完全な答えです-または上記の答えに注意する必要があります。
-bshea

まさに私が探していたもの。--strip-components異なるバージョンを使用する可能性のあるプロビジョニングツールを実行するときに非常に便利です。この方法/target/directoryは、プロバイダーがアーカイブフォルダーに名前を付ける方法を心配することなく、一般的な名前にすることができます。
Jack_Hu

30

以前の回答とコメントを組み合わせます。

単に内容を抽出し、ターゲットディレクトリが存在しない場合に作成するには:

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

zipのルート(第1レベル)ディレクトリを抽出し、削除するには

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

20

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

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

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

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

3
GNU tar 1.26を使用していますが、認識されないオプションエラーが表示されます--one-top-level
Emma Strubell

これが私が必要とした答えです。ディレクトリ名を指定する必要がある場合や、ファイルを参照して名前を参照する特別なコードを覚えておく必要がある場合は、非常に便利です。ありがとうございました。
偽善者

2

抽出に関して興味深いと思うのは、アーカイブの作成方法に依存することです。この例を参照してください

cd /tmp
mkdir folder
touch folder/file.txt

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

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


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.