find + xargs + tar (append) + gzip + ssh

Bash, Shell, PHP, Python, Perl, CGI
dante
Posts: 128
Joined: 2010-04-20 12:50

find + xargs + tar (append) + gzip + ssh

Post by dante »

Moin zusammen,

folgendes funktioniert, die Vorgehensweise sollte erkennbar sein:

Code: Select all

find . -name \*sync\* -mtime +2 -print0 |xargs -0 tar -cvf - |gzip -c -1 |ssh root@10.5.13.37 "cat > /mein/pfad/file.tar.gz"
Was nicht funktioniert ist die Option -r bei tar, also append statt create, wenn ich von STDIN lese.

Der Fehler:
tar: Options `-Aru' are incompatible with `-f -'
Ich möchte nur vermeiden, dass nicht aus irgendwelchen Gründen mehrere Archive erstellt werden, sondern alle Dateien (egal wieviele und wie groß) im selben Archiv landen.

Habe ich eventuell einen Denkfehler?


Alternative Frage: Habe ich eine Möglichkeit die ursprüngliche Ergebnisliste von find nochmals zu verwenden? Die Idee ist in einer Zeile zu packen und kopieren und danach die entsprechenden Dateien zu löschen.
ZWNobyAiSGVsbCB5ZWFoLCBiYXNlNjQiIHwgYmFzZTY0ClNHVnNiQ0I1WldGb0xDQmlZWE5sTmpRSw==
ddm3ve
Moderator
Moderator
Posts: 1226
Joined: 2011-07-04 10:56

Re: find + xargs + tar (append) + gzip + ssh

Post by ddm3ve »

Zur alternative Frage.
eine einfache for Schleife.

Code: Select all

files=`find .....`

for file in $files; do echo $file ; done
Last edited by ddm3ve on 2012-04-11 16:31, edited 1 time in total.
02:32:12 21.12.2012 und dann sind Deine Probleme alle unwichtig.
User avatar
Joe User
Project Manager
Project Manager
Posts: 11174
Joined: 2003-02-27 01:00
Location: Hamburg

Re: find + xargs + tar (append) + gzip + ssh

Post by Joe User »

dante wrote:Was nicht funktioniert ist die Option -r bei tar, also append statt create, wenn ich von STDIN lese.
Das Lesen von STDIN ist nicht das Problem, sondern das Schreiben nach STDOUT.
dante wrote:Ich möchte nur vermeiden, dass nicht aus irgendwelchen Gründen mehrere Archive erstellt werden, sondern alle Dateien (egal wieviele und wie groß) im selben Archiv landen.
Genau das tun sie bei Deinem Einzeiler, wie auch bei meinem leicht Angepasstem*:

Code: Select all

find . -name \*sync\* -mtime +2 -print0 |\
 xargs -0 tar -czSpvf - |\
 ssh root@10.5.13.37 "cat > /mein/pfad/file.tar.gz"
Alternativ geht es auch so:

Code: Select all

find . -name \*sync\* -mtime +2 -print0 |\
 xargs -0 tar -czSpvf /tmp/file.tar.gz &&\
 scp /tmp/file.tar.gz root@10.5.13.37:/mein/pfad/file.tar.gz
dante wrote:Alternative Frage: Habe ich eine Möglichkeit die ursprüngliche Ergebnisliste von find nochmals zu verwenden? Die Idee ist in einer Zeile zu packen und kopieren und danach die entsprechenden Dateien zu löschen.
Das könnte man quick&dirty in etwa so lösen (ungetestet!):

Code: Select all

find . -name \*sync\* -mtime +2 -print0 |\
 xargs -0 echo - > /tmp/file.lst &&\
 cat /tmp/file.lst |\
 tar -czSpvf /tmp/file.tar.gz &&\
 cat /tmp/file.lst |\
 rm -f - &&\
 scp /tmp/file.tar.gz root@10.5.13.37:/mein/pfad/file.tar.gz

* Die Optionen für tar sind angepasst.
Last edited by Joe User on 2012-04-11 17:34, edited 1 time in total.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
dante
Posts: 128
Joined: 2010-04-20 12:50

Re: find + xargs + tar (append) + gzip + ssh

Post by dante »

Joe User wrote: Alternativ geht es auch so:

Code: Select all

find . -name \*sync\* -mtime +2 -print0 |\
 xargs -0 tar -czSpvf /tmp/file.tar.gz &&\
 scp /tmp/file.tar.gz root@10.5.13.37:/mein/pfad/file.tar.gz
Das war zum Zeitpunkt leider nicht möglich, da [Größe des Archivs] > [Freier Speicherplatz] war :oops:

Mit der Alternative werde ich morgen mal spielen, gelöst habe ichs erstmal via Schleife.

Bis dahin vielen Dank an euch
ZWNobyAiSGVsbCB5ZWFoLCBiYXNlNjQiIHwgYmFzZTY0ClNHVnNiQ0I1WldGb0xDQmlZWE5sTmpRSw==
User avatar
Joe User
Project Manager
Project Manager
Posts: 11174
Joined: 2003-02-27 01:00
Location: Hamburg

Re: find + xargs + tar (append) + gzip + ssh

Post by Joe User »

Wie gross wird das Backup denn maximal und wieviel RAM ist durchschnittlich frei?

Ich hätte auch noch eine weitere Alternative, bei der dauert dann aber die Dateiübertragung zum Backupserver etwas länger. Wäre das trotzdem interessant?
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
dante
Posts: 128
Joined: 2010-04-20 12:50

Re: find + xargs + tar (append) + gzip + ssh

Post by dante »

Das wäre definitv interessant. Vor allem für VMs, da mein VMware-Admin gern mal mit dem Plattenplatz geizt ;)

In dem Fall war das Backuparchiv ~8GB bzw. ~450MB komprimiert groß. RAM liegt bei 6GB, wobei zu Backupzeiten eigentlich immer >50% frei sind.

Die Übertragungsdauer spielt keine große Rolle, da diese Backups später nur 1x / Woche gemacht werden.
ZWNobyAiSGVsbCB5ZWFoLCBiYXNlNjQiIHwgYmFzZTY0ClNHVnNiQ0I1WldGb0xDQmlZWE5sTmpRSw==
User avatar
Joe User
Project Manager
Project Manager
Posts: 11174
Joined: 2003-02-27 01:00
Location: Hamburg

Re: find + xargs + tar (append) + gzip + ssh

Post by Joe User »

Ungetestet, müsste aber funktionieren:

Code: Select all

find . -name \*sync\* -mtime +2 -print0 | xargs -0 cat |\
 ssh root@10.5.13.37 "tar -czSpvf /mein/pfad/file.tar.gz"
Vorteil: Nahezu keine Last auf dem Quellsystem
Nachteil: Sehr hoher Traffik durch Rohdaten+Overhead
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.