Unter Solaris: Suchen, an einen Tarball anhängen und Frage komprimieren

Unter Solaris: Suchen, an einen Tarball anhängen und Frage komprimieren

Solaris 11

Ich möchte alle Dateien finden, die älter als 31 Tage sind, sie tarnen und die TAR-Datei komprimieren.

Ich möchte dies in einer Zeile erledigen. Ich würde lieber pbzip2 als gzip verwenden!!!

Folgendes habe ich als Prototyp ausprobiert: find /tmp -mtime +31 -type f -name "arch*" -exec sh -c 'tar -czvPfE /tmp/old_files_$(date +%F).tar.gz $0' {} \;

Das Problem dabei ist, dass für jede Datei ein Tar.gz erstellt wird, das die vorherige Datei überschreibt (ich möchte alle Dateien in nur einem Tarball). Das „r“ funktioniert nur, wenn das Tar existiert. Und das „z“ ruft gzip auf, nicht pbzip2.

AKTUALISIEREN: @DopeGhoti Thank you. First, my bad for not checking the man page for the "j" option. However, this almost worked. root@myhost:/tmp# find /tmp -mtime +31 -type f -name "arch*"| wc -l =207 root@myhost:/tmp# find /tmp -mtime +31 -type f -name "arch*"| xargs tar -cjf /tmp/old_files_$(date +%F).tbz root@myhost:/tmp# l|tail -rw------- 1 root root 1.6K Nov 30 15:59 old_files_2017-11-30.tbz root@myhost:/tmp# bunzip2 old_files_2017-11-30.tbz root@myhost:/tmp# tar tf old_files_2017-11-30.tar|wc -l =15

Antwort1

Vorausgesetzt, die Dateinamen enthalten keine Zeilenumbruchzeichen, POSIX-mäßig (außer pbzip2offensichtlich), wodurch die Liste der zu archivierenden Dateien standardmäßig auf stdin übernommen wird (und das Archiv standardmäßig auch auf stdout geschrieben wird)

find /tmp -mtime +31 -type f -name "arch*" | pax -w | pbzip2 > file.tar.bz2

Oder verwenden Sie Solaris, damit Sie Ihre / -Optionen tarbehalten können :PE

find /tmp -mtime +31 -type f -name "arch*" |
  tar cvPEf - -I /dev/stdin | pbzip2 > file.tar.bz2

-I /dev/stdinum die Dateiliste von stdin zu nehmen, f -das Archiv auf stdout auszugeben, welches dann pbzip2wie mit komprimiert wird pax.

verwandte Informationen