tarから別のフォルダに個々のファイルを抽出する

tarから別のフォルダに個々のファイルを抽出する

いくつかのフォーラムでこの質問を検索してさまざまな回答を見ましたが、これまでここで見た回答も何の効果もありませんでした。

tarから別のディレクトリに個々のファイルを抽出したいと思います。

私はこれを試しました:

tar xvf file.tar -C /home/dir/ filename

またはこれ:

tar -x filename -f file.tar -C /home/dir

ただし、それぞれ次のエラーが発生します。

x filename, 14826 bytes, 29 media blocks.
File -C not present in the archive.
File /home/dir not present in the archive.

そして:

tar: /dev/rmt0: A file or directory in the path name does not exist.

1つ目はファイルを解凍しますが、目的のフォルダではなく同じディレクトリにあります。

答え1

ほとんどのバージョンでは、tarオプションの前にマイナス記号を追加するかどうかに応じて、2つのモードがあります。

トップAIX tarのマニュアルページ違いをまとめると、次のようになります。

Berkeley Standards:

tar {c|r|t|u|x} ... [ Archive ] Directory | File ...

X/Open Standards:

tar {-c|-r|-t|-u|-x} ... [-f Archive] ... [-C Directory] File | Directory...

マイナスなし、tarBerkeley互換モードで動作します。このモードでは、オプションは現在標準のUNIXコマンドラインルールに従いません。代わりに、すべてのフラグを順序に関係なく一緒に配置する必要があります。このfフラグは、フラグの後の最初の単語がテープドライブの代わりに使用する必要があるファイル名であることを意味します/dev/rmt0。 (tテープを意味し、デフォルトはこれを反映します。)また、tar互換モードにはオプションはありません。-C

tarほとんどのUNIXコマンドのように機能するマイナス記号を使用してください。すべてのフラグ(および対応する引数)を最初に指定し、フラグではなくフラグを指定する必要があります。 -fファイル名を引数として使用するため(本質的にファイル名はフラグに属する-ffile.tar、直後に続く必要があります-f。これがマンページがにあるが引数を取らない理由です[-f Archive](属していません)。マニュアルページを見直すと、あなたの例ではコマンドラインの最後まで一致します。Archive-f-xfilename-xfilenameFile | Directory...

コマンドの変更されたバージョンは次のとおりです。

(cd /home/dir; tar xvf /path/to/file.tar filename)

そして

tar -x -f file.tar -C /home/dir filename

GNU tarも同様のことをします。 3つのオプションスタイル違いの素晴らしい説明。

関連情報