Befehl tar - Symlinks überspringen

12

Ich benutze den Befehl tar als,

tar -cvf protTests.tar protTests/*

zu tarallen Dateien im Ordner , protTests. Dies schließt jedoch die symbolischen Links innerhalb des Ordners ein, was nicht erwünscht ist.

Gibt es eine Befehlszeilenoption, bei der alle Symlinks weggelassen werden?

Gilles 'SO - hör auf böse zu sein'
quelle

Antworten:

10

Sie können dies tun, um tareine Liste aller darin enthaltenen Dateien mit protTestsAusnahme derjenigen, die Symlinks sind, bereitzustellen:

find protTests -maxdepth 1 -mindepth 1 -not -type l -print0 |
  tar --null --files-from - -cvf protTests.tar

Übrigens Ihr bestehender Befehl:

tar -cvf protTests.tar protTests/*

archiviert nicht alle Dateien in protTests, sondern nur diejenigen, deren Namen nicht beginnen .(diejenigen, die nicht versteckt sind). Der *Glob-Operator überspringt Dateien, deren Namen standardmäßig beginnen .. Der Befehl hat auch das Problem, dass wenn protTestsviele Dateien (mehr als viele tausend) vorhanden sind, protTests/*diese auf zu viele Argumente erweitert werden können, um in die Befehlszeile zu passen.

Ein einfacher Befehl wie dieser hätte keines dieser Probleme:

tar -cvf protTests.tar protTests
Celada
quelle
1
Tar hat keine Option --files-from, dies ist eine Option von gtar. Wenn Sie also einen solchen Rat geben, erwähnen Sie besser, dass dies gtar-spezifisch ist. Find hat keine primäre -not, dies ist ein weiterer nicht portabler GNUism. Im Allgemeinen ist es eine schlechte Idee, einen separaten Suchaufruf zu verwenden. Dies kann zu Problemen mit lustigen Zeichen im Dateinamen führen und führt definitiv zu einer geringen Leistung, da sowohl find als auch tar das Dateisystem scannen müssen. Diese Probleme gelten nicht für Programme wie star, die libfind verwenden und daher den Suchcode enthalten.
schily
Lassen Sie mich noch einen allgemeinen Hinweis hinzufügen: Wenn Sie einen Rat geben, der für eine herstellerspezifische Variante eines UNIX-Programms spezifisch ist, empfiehlt es sich, den Hersteller zu erwähnen und dass er herstellerspezifisch ist. Dies kann normalerweise unter Verwendung der offiziellen Namen der Software erfolgen, z. B. gtar anstelle von tar, vim anstelle von vi. Beachten Sie, dass dies eine UNIX-bezogene Informationsplattform ist. Daher sollten Beispiele im Allgemeinen an den POSIX-Standard angepasst werden.
schily
Sie haben Recht, @schily, dies ist eine GNU-spezifische Lösung. Ihre Antwort basierend auf starist eine gute Alternative und ich habe sie aus diesem Grund positiv bewertet. Ich stimme auch dem Einwand der "lustigen Charaktere" zu, aber da GNU tarkeine -0Option hat, ist es ein Kompromiss. Ich bin mit dem Einwand der Leistung nicht einverstanden, das ist in dieser Situation wirklich ohne Bedeutung.
Celada
2
@schily, sowohl GNU tarals auch bsdtarhaben --files-fromund --nullwas das Problem mit lustigen Charakteren beseitigt (wenn mit find's -print0oder kombiniert -exec printf '%s\0' {} +). Aber hier möchten Sie wahrscheinlich die --no-recursionOption hinzufügen . Einige paxImplementierungen haben auch eine -0Option.
Stéphane Chazelas
2
@schily Ich bin der Meinung, dass dieser Kommentarthread nicht der Ort ist, an dem für verschiedene Versionen von geworben wird tar. Bitte nimm es zum Chatten . Es ist schon viel zu lang und liest sich wie ein religiöser Krieg. Es sei denn, das OP meldet sich zu diesem Zeitpunkt an, ich denke nicht, dass es wichtig ist, welche Version von tarverwendet wird. Wir wissen nicht einmal, welche Art von Unix sie verwenden.
Celada
-2

Meine Teerimplementierung ist die beste Methode

star -cv -f out.tar -find protTests ! -type l
schily
quelle
7
zsh: command not found: starWenn Sie Dienstprogramme erwähnen, von denen Sie wissen, dass> 99% Ihrer Leser nicht über Ihre Systeme verfügen, erklären Sie, wo Sie sie erhalten. Und Sie müssen Ihre Zugehörigkeit offenlegen, wenn Sie Ihr eigenes Produkt erwähnen (unabhängig davon, ob Sie den Link veröffentlichen oder nicht, Sie können den Link also genauso gut veröffentlichen).
Gilles 'SO - hör auf böse zu sein'
Ein typisches Linux-System vermisst heutzutage nach einer Standardinstallation viele wichtige Software und gleichzeitig wird viele nutzlose Software installiert. Ein Linux-Benutzer sollte wissen, wie fehlende Software installiert wird, und Personen, die häufig tar verwenden, haben normalerweise ohnehin star installiert.
schily
8
Die überwiegende Mehrheit der Menschen, die häufig Teer verwenden, hat noch nie von Pax gehört, geschweige denn von Sternen.
Gilles 'SO - hör auf böse zu sein'
Nun, diejenigen Leute, die nicht wissen, dass sie gtar unter Linux verwenden, wenn sie "tar" nennen, sind wahrscheinlich nicht die Leute, die sich sowieso darum kümmern. Star ist die älteste kostenlose Teerimplementierung, und viele Funktionen, die in verschiedenen Teerimplementierungen zu sehen sind, wurden von star übernommen. Warum also nicht über das Original sprechen?
schily