私はよく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*