tar cvf oder tar -cvf?


24

Ich habe gelernt, tar ohne '-' für Optionen zu verwenden, tar cvfz dir.tar.gz Directory/bin aber kürzlich auf die etwas andere tar -czvfSyntax gestoßen (ich denke, das 'f' muss in diesem Fall die letzte Option sein).

Beide funktionieren unter Linux und Mac OS. Gibt es eine empfohlene Syntax mit oder ohne '-', die portabler für Unix-Aromen ist?



Der Grund, warum -fdie letzte Option sein muss, ist, dass sie ein Argument benötigt und dieses Argument möglicherweise die Option berührt. tar -cvfz dir.tar.gz Directorybedeutet, ein Archiv mit dem Namen zu erstellen z, das die Dateien dir.tar.gzund enthält Directory.
JoL

Antworten:


27

tarist einer dieser alten Befehle aus der Zeit, als die Optionssyntax noch nicht standardisiert war. Da bei allen nützlichen Aufrufen von tareine Operation angegeben werden muss, bevor ein Dateiname angegeben wird, tarinterpretieren die meisten Implementierungen das erste Argument als Option, auch wenn es nicht mit einem beginnt -. Die meisten aktuellen Implementierungen akzeptieren a -; Die einzige mir bekannte Ausnahme ist Minix .

Ältere Versionen von POSIX und Single Unix enthielten einen tarBefehl ohne -vor dem Operationsspezifizierer. Single Unix v2 hatte sowohl traditionelle Archivierungsprogramme cpioals auch tar, aber nur sehr wenige Flags konnten standardisiert werden, da die vorhandenen Implementierungen zu unterschiedlich waren. Daher führten die Standards einen neuen Befehl ein pax, der der einzige Standardarchivierungsprogramm seit Single Unix v3 ist . Wenn Sie Standardkonformität wünschen, verwenden Sie pax, aber beachten Sie, dass viele Linux-Distributionen diese nicht in ihre Basisinstallation einbeziehen und es paxin Minix keine gibt . Wenn Sie Portabilität in der Praxis wollen, verwenden Sie tar cf filename.tar.



1
Beachten Sie auch, dass eine Linux-Distribution in der paxRegel die schlechteste bekannte pax-Implementierung (GNU pax) enthält, die aufgrund vieler Fehler vermieden werden sollte.
Schily

Der psBefehl hat auch das gleiche Verhalten, Sie können das -für die Optionen weglassen .
perror

1
@perror Das ist falsch. Viele Versionen von pslassen Sie das nicht auslassen -. Die Linux-Version bietet Optionen mit und ohne -, die meisten haben jedoch unterschiedliche Bedeutungen (BSD- oder System V-Kompatibilität).
Gilles 'SO- hör auf böse zu sein'

1
Es ist wahr, dass ich die meiste Zeit nur ps aux... benutze , also könnte ich mich (teilweise) irren. Es tut uns leid.
perror

13

Ich mag ein Dinosaurier sein, aber ich denke, dass die gewohnheitsmäßige Verwendung von "cvf" anstelle von "-cvf" wahrscheinlich portabler ist. Ich stelle mir die meisten Linux - Distributionen verwenden GNU tar, und ich würde vermuten , dass die * BSDs auch tun, aber Sie werden proprietäre Unix - Varianten finden , die noch den alten SysV Teer verwendet werden , die verwendet benötigen Sie keine Verwendung ‚-‘ in den Optionen .

Ich verwende nicht "-cvf" (oder "-xf" oder was auch immer) und habe auch mit Arch Linux keine Probleme.

Und nur als Randnotiz, ich denke, Sie können die Sun-Standard "jar" -Befehlsoptionen auch mit oder ohne '-' verwenden.


Ich stimme Ihrer Antwort zu, auch wenn auf der Infoseite von tar (auf der die drei Arten der Angabe von Optionen sehr deutlich sind) vermerkt ist, dass alte Optionen nur aus Kompatibilitätsgründen beibehalten werden und es eine Reihe von Optionen gibt, die KEINE alte Entsprechung aufweisen.
David Costa

1
Sie liegen falsch: tar unter AT & T UNIX wurde geschrieben, um kein - aber es akzeptiert das - zu haben und überspringt es. Die einzige tragbare Möglichkeit, tar aufzurufen, besteht darin, es ohne die - und wenn Sie jemals eine "tar" -Implementierung finden, die Dinge ohne - nicht akzeptiert, ist dies kein tar.
Schily

3

Unter UNIX gibt es nur wenige Programme, die nicht dem aktuellen Optionsstandard entsprechen.

Eines ist dd, aber dd wurde vom IBM-Mainframe-Programm DDR(Disk Dump and Restore) abgeleitet.

Eins ist arund das andere ist tar. Nach meinen Informationen wollte tar ar ähnlich sein.

Alle tar-Implementierungen funktionieren ohne das - und für keine nützliche Implementierung ist das - erforderlich. Wenn Sie also portable Skripte schreiben möchten, überprüfen Sie den SUSv2-Standard und verwenden Sie nur eine zu SUSv2 kompatible Befehlszeile.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.