web-dev-qa-db-fra.com

L'extraction tar dépend du nom de fichier?

Je télécharge souvent des builles avec wget de Sourceforge.net.

Les fichiers téléchargés sont ensuite nommés, E.g SQliteManager-1.2.4.tar.gz?r=http:%2F%2Fsourceforge.net%2Fprojects%2Fsqlitemanager%2Ffiles%2F&ts=1305711521&use_mirror=switch

Quand j'essaie de

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

Je reçois le message d'erreur suivant:

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

Après avoir renommé le fichier à foo.tar.gz L'extraction fonctionne parfaite.

Y a-t-il un moyen, que je ne suis pas obligé de renommer chaque fois le fichier cible avant d'extraire?

34
casper

La raison de l'erreur que vous voyez peut être trouvée dans la section Documentation TAR GN :

Si le nom du fichier archive comprend un côlon (':'), il est supposé être un fichier sur une autre machine [...]

C'est-à-dire qu'il interprément SQliteManager-1.2.4.tar.gz?r=http En tant que nom d'hôte et essayant de le résoudre à une adresse IP, d'où l'erreur "Échec de la résolution".

La même documentation continue à dire:

Si vous devez utiliser un fichier dont le nom comprend un côlon, le comportement du lecteur de bande distant peut être inhibé à l'aide de l'option "--force-local".

51
camh

Lorsque vous téléchargez avec wget, spécifiez le nom du fichier de sortie avec le -O option.

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

Cela fera enregistrer le fichier avec le nom de fichier donné et vous sauvera le problème ou le renommer. Et non, vous n'êtes pas le seul à qui souhaite Sourcefourge ne serait pas aussi muet que de transmettre des fichiers avec les paramètres d'URL joints.

6
Caleb

Télécharger en utilisant

wget --trust-server-names URL

De cette façon, wget va enregistrer avec les noms de fichiers appropriés. Par défaut, il utilise le dernier composant de l'URL

Pour par exemple

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

Comme cité ci-dessus, le : (colonne) faire tar pense que c'est un fichier distant. Nous devons donc faire respecter le fait que c'est local.

Fail

$ tar czf "back$(date -u +"%H:%M").tar.gz" ./
tar (child): Cannot connect to back10: resolve failed
tar: Child returned status 128
tar: Error is not recoverable: exiting now

Solution

Explicit le fait que c'est un fichier local en ajoutant ./ (répertoire actuel) et citer correctement:

$ tar czf ./"back$(date -u +'%H:%M').tar.gz" ./
tar: .: file changed as we read it

L'avertissement est dû au fait que je crée dans le répertoire source.

4
Édouard Lopez

Pour les fichiers déjà téléchargés, cela devrait fonctionner:

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