tar抽出はファイル名によって異なりますか?

tar抽出はファイル名によって異なりますか?

私はよくwgetを使ってsourceforge.netからtarballをダウンロードします。

次に、ダウンロードしたファイルの名前を指定します。SQliteManager-1.2.4.tar.gz?r=http:%2F%2Fsourceforge.net%2Fprojects%2Fsqlitemanager%2Ffiles%2F&ts=1305711521&use_mirror=switch

私が試したとき

tar xzf SQliteManager-1.2.4.tar.gz\?r\=http\:%2F%2Fsourceforge.net%2Fprojects%2Fsqlitemanager%2Ffiles%2F\&ts\=1305711521\&use_mirror\=switch

次のエラーメッセージが表示されます。

tar (child): Cannot connect to SQliteManager-1.2.4.tar.gz?r=http: resolve failed

gzip: stdin: unexpected end of file
tar: Child returned status 128
tar: Error is not recoverable: exiting now

ファイルの名前を変更すると、foo.tar.gz解凍は完全に機能します。

抽出するたびにターゲットファイルの名前を変更する必要がない方法はありますか?

答え1

表示されるエラーの原因は次のとおりです。GNU tar ドキュメント:

アーカイブファイル名にコロン(':')が含まれている場合は、別のコンピュータ上のファイルと見なされます[...]

つまり、これをSQliteManager-1.2.4.tar.gz?r=httpホスト名として解釈し、それをIPアドレスに解決しようとすると、「確認失敗」エラーが発生します。

同じ文書は続けて次のように言います。

名前にコロンを含むファイルを使用する必要がある場合は、「--force-local」オプションを使用してリモートテープドライブの動作を抑制できます。

答え2

ダウンロードを使用する場合は、wgetオプションを使用して出力ファイル名を指定してください-O

wget "http://domain.com/file.tgz?crazy=args&stuff=todelete" -O file.tgz

これにより、ファイルが指定されたファイル名で保存され、名前を変更する手間が省けます。いいえ、sourcefourgeが追加のURLパラメータを持つファイルを渡すほど愚かではないことを望む人はあなただけではありません。

答え3

ダウンロードと使用

wget --trust-server-names URL

これにより、wgetは正しいファイル名で保存されます。デフォルトではURLの最後のコンポーネントを使用します。

例えば

wget --trust-server-names http://sourceforge.net/projects/sqlitemanager/files/sqlitemanager/1.2.4/SQliteManager-1.2.4.tar.gz/download

答え4

すでにダウンロードしたファイルの場合は、次のように動作します。

tar xzf - < SQliteManager-1.2.4.tar.gz*

関連情報