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?
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".
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.
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
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.
$ 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
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.
Pour les fichiers déjà téléchargés, cela devrait fonctionner:
tar xzf - < SQliteManager-1.2.4.tar.gz*