bsdtar
rpm
にあったのでソース(libarchive Webサイト)からインストールしましたyum
。
bsdtar
ヘルプメッセージを見ることができます。たとえば、
$ bsdtar --help
First option must be a mode specifier:
-c Create -r Add/Replace -t List -u Update -x Extract
Common Options:
...
bsdtar 3.1.2 - libarchive 3.1.2
ただし、ファイルを抽出しようとすると、次のエラーが発生します。
$ bsdtar -xzC . < archive.tar.gz
bsdtar: Error opening archive: Failed to open '/dev/st0'
このエラーをどのように解決できますか?
答え1
x
モードではtar
requireのすべてのPOSIX互換バージョン-f
デフォルト以外の場所から入力アーカイブを読み込みます。を読むには、POSIXではファイル名も指定するstdin
必要があります。-
$ tar -xf - < file.tar
GNUとGNUのtar
両方がbsdtar
この構文を理解しています。
GNUは、次の場所でアーカイブをtar
許可するという点でPOSIXとは異なりますtar
。stdin
いいえ明確な-f -
主張。実際にPOSIXではがなければ-f -
まったく使用してはいけないと言いますstdin
。あなたの質問からtar
GNUユーザーからコマンドラインの例を得ていることが明らかになりました。
bsdtar
POSIXをフォロー-f -
stdin
ファイルの代わりに読みたい場合に必要です。
これは実際の質問につながります。何も提供されていない場合、読み取りが選択されるの-f -
はなぜですか?上記のデフォルト値です。 POSIXは、単にこのデフォルト値が「システムに依存する」ことを意味し、最初の名前を使用することを選択します。bsdtar
/dev/st0
bsdtar
テープドライブ~の開発ノード、これはLinuxにあります/dev/st0
。1
あなたはこう言うべきです:
$ bsdtar -xf - < archive.tar.gz
またはリダイレクトを完全にスキップします。
$ bsdtar -xf archive.tar.gz
-z
GNUbsdtar
とGNUの両方がモードでtar
自動的に圧縮を検出するため、削除されました。 (以前のバージョンのGNUには圧縮型フラグが必要でしたが、gzip
x
tar
バージョン 1.15 には自動検出機能が追加されました。、2004年発売。 )
また、アーカイブを解凍する前に現在のディレクトリに変更するように-C .
求められたため、対応するビットも削除しました。bsdtar
それアクションなし。
- 最初のテープドライブがデフォルトの理由は何ですか?なぜなら
tar
テープアーカイバーです。tar
~から一度実際、ほとんどすべてのUnixシステムにはテープドライブがあります。