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 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.
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?
--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.star
ist eine gute Alternative und ich habe sie aus diesem Grund positiv bewertet. Ich stimme auch dem Einwand der "lustigen Charaktere" zu, aber da GNUtar
keine-0
Option hat, ist es ein Kompromiss. Ich bin mit dem Einwand der Leistung nicht einverstanden, das ist in dieser Situation wirklich ohne Bedeutung.tar
als auchbsdtar
haben--files-from
und--null
was das Problem mit lustigen Charakteren beseitigt (wenn mitfind
's-print0
oder kombiniert-exec printf '%s\0' {} +
). Aber hier möchten Sie wahrscheinlich die--no-recursion
Option hinzufügen . Einigepax
Implementierungen haben auch eine-0
Option.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 vontar
verwendet wird. Wir wissen nicht einmal, welche Art von Unix sie verwenden.Meine Teerimplementierung ist die beste Methode
quelle
zsh: command not found: star
Wenn 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).