tar çıkarımı dosya adına bağlı mı?


33

Sık sık tarball'ları wget ile sourceforge.net adresinden indiririm.

İndirilen dosyalar daha sonra adlandırılır, örneğin SQliteManager-1.2.4.tar.gz?r=http:%2F%2Fsourceforge.net%2Fprojects%2Fsqlitemanager%2Ffiles%2F&ts=1305711521&use_mirror=switch

Denediğimde

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

Aşağıdaki hata iletisini alıyorum:

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

Çıkardıktan sonra dosyayı yeniden adlandırdıktan sonra foo.tar.gzmükemmel çalışıyor.

Hedef dosyayı ayıklamadan önce her seferinde yeniden adlandırmaya zorlanmamın bir yolu var mı?

Yanıtlar:


50

Gördüğünüz hatanın nedeni GNU tar belgelerinde bulunabilir :

Arşiv dosyası adı iki nokta üst üste (':') içeriyorsa, o zaman başka bir makinedeki bir dosya olduğu varsayılır [...]

Diğer bir deyişle, SQliteManager-1.2.4.tar.gz?r=httpbir ana bilgisayar adı olarak yorumlanıyor ve bir IP adresine çözümlemeye çalışıyor, bu nedenle "çözümleme başarısız" hatası.

Aynı belgeler şöyle devam eder:

Adı iki nokta içeren bir dosya kullanmanız gerekirse, uzak teyp sürücüsü davranışı '--force-local' seçeneği kullanılarak engellenebilir.


Daha --force-localönce eklenmesi gerektiğini unutmayın f... bunu ilk denediğimde, böyle bir dosyanın nasıl olmadığı konusunda bana bir hata mesajı veriyordu --force-local. Belki bu çok "hayır" dır, ancak 5 dakika sonra yaptığım hatayı anlamadım.
ArtOfWarfare

@ArtOfWarfare: ftarfile olan bir argüman alır. Ve argümanı --force-localarasına koyamazsınız f, ancak bu sadece tarve değil tüm programlar için standarttır -f. Argümandan --force-localsonra folduğu sürece de koyabilirsiniz f.
camh

Benim yorumumda dediğim gibi, belki de “hayır”. Tar'ı bu şekilde kullanıyorum tar -cvzf ...ve her bayrağın gerçekte% 99'unun ne yaptığını bile düşünmüyorum - bu sadece bir tar.gz yapmamın bir yansıması.
ArtOfWarfare

Bu notta, bu iki şeyin (@ArtOfWarfare ve @camh) söylediklerinde daha yararlı olmak için bir örnek: tar zxvf C:\Users\jdoe\Documents\tarfile.tgz --force-local
Dr. Dan

6

Karşıdan wgetyüklediğinizde, -Oseçenekle birlikte çıktı dosyası adını belirtin .

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

Bu, dosyanın belirtilen dosya adıyla kaydedilmesine ve sizi sorundan kurtarmasına veya yeniden adlandırmasına neden olur. Ve hayır, sourcefourge dilekçelerini tek ekleyen siz değilsiniz, ekli url parametreleriyle dosyaları dışa aktaracak kadar aptalca olmazlar.


Bu SourceForge’un suçu değil, ama wget. --content-dispositionSunucu tarafından belirtilen dosya adıyla kaydetmek için bayrağı kullanın (ancak SourceForge daha sonra isteğe bağlı bir dosya adına yazabildiği için güvenlik uygulamalarına dikkat edin).
pcworld

4

Kullanarak indir

wget --trust-server-names URL

Bu şekilde wget, doğru dosya isimleri ile tasarruf sağlayacaktır. Varsayılan olarak, URL’deki son bileşeni kullanır.

Örneğin

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

4

Yukarıda da belirtildiği gibi : (sütun) taruzak bir dosya olduğunu düşündürmektedir. Bu yüzden yerel olduğu gerçeğini uygulamamız gerekiyor.

Başarısız

$ 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

Çözüm

Yerel bir dosya ekleyerek ./(geçerli dizin) ve doğru bir şekilde alıntı yaparak açıklayın:

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

Uyarı, kaynak dizinde yarattığım gerçeğinden kaynaklanıyor.


Uzun bir bayrak kullanmaktan çok daha iyi. Ayrıca, uzaktan ana bilgisayar indirme işleminin, bu amaca ulaşmak için özel araçlar varken yararsız bir seçenek olduğuna inanıyorum.
Alireza Mohamadi

3

Zaten indirilmiş dosyalar için, bu çalışması gerekir:

tar xzf - < SQliteManager-1.2.4.tar.gz*
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.