Neden tar-xvfz başarısız olur, ancak tar xvfz çalışır?


41

tar -xvfz foo.tar.gz hata döndürür tar: z: Cannot open: No such file or directory

Bu tamamen anlaşılabilir bir durumdur - fanahtar bir dosya adı bekliyor ve bu nedenle de son olması gerekiyor.

Bununla birlikte, kısa çizgiyi tar xvfz foot.tar.gzatlamak, dosyayı açar ve sıkıştırır ve kaldırır.

Bunu OS X 10.8 ve Ubuntu 12.04 üzerinde test ettim.

Neden bir fikrin var mı?

[eklemek için düzenlendi]

Ben her zaman kullanırım tar -zxvf foo.tar.gz. Ancak, bu soru bu xkcd ve biri tar xvfzişe yarayacağı konusunda ısrar ettiğimde şaşırttı .

görüntü tanımını buraya girin


12
Çok üzgünüm: xkcd.com/1168
MichaelHouse

Yanıtlar:


61

katran göre (sözdizimi 3 çeşidi vardır Bu ):

  • uzun seçenekler (--file)
  • kısa seçenekler (-f)
  • eski seçenekler (f)

Eski seçenek sözdizimi için tüm harflerin "tar" izlemesi ve hepsinin boşluksuz tek bir kümeye düşmesi gerekir. Harflerin sırası gerçekten önemli değil, bu seçeneklerin argümanları seçenekler kümesinden sonra aynı sırayı takip ettiği sürece.

Tar seçeneklerini yazmanın bu eski yolu deneyimli kullanıcıları bile şaşırtabilir. Örneğin, iki komut:

 # tar cfz archive.tar.gz file
 # tar -cfz archive.tar.gz file

oldukça farklı. İlk örnek, 'f' seçeneğinin değeri olarak 'archive.tar.gz' öğesini kullanır ve 'z' seçeneğini tanır. Bununla birlikte ikinci örnek, 'z' seçeneğini 'f' seçeneği için değer olarak kullanır - muhtemelen amaçlananı değil.

Eski seçenekler, tar'ın eski sürümleriyle uyumluluk için korunur.

'-' komutu, eşittir.

tar -czf archive.tar.gz file
tar -cf archive.tar.gz -z file
tar cf archive.tar.gz -z file

Örneğinizin "-" olmadan ve "-" ile çalışmamasının nedeni budur.


3
wtf unix
BlueRaja
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.