instinctless
Goto Top

Rsync Optionen werden bei der Verwendung von xargs nicht übernommen

Hallo Community,
ich bekomme ein Problem mit xargs nicht gelöst.

Aufgrund von einem Netapp Problem, welches unsere IT nicht gelöst bekommt, muss ich Daten von der Linux Console immer 2x kopieren.
Um das zu vereinfachen, habe ich das immer mit seq gelöst.
Als Beispiel:

seq 2 | xargs -I -- cp -rv foo_* /bar

Das klappt auch ganz gut. Nun möchte ich aber bestimmte Dateien im Quellverzeichnis auslassen, sodass ich mir dachte, das geht ja mit rsync ganz gut.

seq 2 | xargs -I --  rsync -av --progress --exclude '*.bla' foo_* /bar  

Letzteres funktioniert aber nicht, weil sich xargs hier an den rsync optionen stört und das irgendwie falsch interpretiert.
Weiß jemand, warum das bei rsync passiert und bei cp nicht und wie ich das gelöst bekomme?
rsync wird zwar gestartet aber die Optionen
-av --progress --exclude '*.bla'  
werden komplett ignoriert.

Oder gibt es evtl noch einen eleganteren Weg?

Content-ID: 1231302473

Url: https://administrator.de/contentid/1231302473

Printed on: December 13, 2024 at 11:12 o'clock

149062
149062 Sep 06, 2021 updated at 13:35:10 (UTC)
Goto Top
Letzteres funktioniert aber nicht, weil sich xargs hier an den rsync optionen stört und das irgendwie falsch interpretiert.
Gebe einen definierten Ersetzungsstring dann lüppt dat auch wie gewünscht ...
seq 2 | xargs -I{} rsync -av --progress --exclude '*.bla' foo_* /bar/  
oder auch
for x in 1 2 ;do rsync -av --progress --exclude '*.bla' foo_* /bar/ ;done  

Aufgrund von einem Netapp Problem, welches unsere IT nicht gelöst bekommt, muss ich Daten von der Linux Console immer 2x kopieren.
Lustisch face-big-smile. Die IT vielleicht mal in den Urlaub schicken, macht den Kopf frei face-wink.
instinctless
instinctless Sep 06, 2021 at 13:25:41 (UTC)
Goto Top
an die for schleife hab ich auch schon gedacht, finde ich aber weniger elegant. die erste lösung funktioniert grundsätzlich. allerdings erzeugt es ein weiteres problem. nämlich das hinter jeder gesyncten datei, irgendein klamauk steht, vermutlich irgendwas temporäres, was schlussendlich nicht korrekt umbenannt wird. das ziellaufwerk ist hier ein nfs / cifs hybrid. im normalfall kopiere ich auf das nfs share. ich habe nun mal rsync auf das cifs share gemacht, dabei synct er dann aber nur die ordner und wirft mir bei jeder datei Operation not permitted.
149062
149062 Sep 06, 2021 updated at 13:34:23 (UTC)
Goto Top
Kann ich nicht nachvollziehen, löppt hier einwandfrei auf nen cifs oder auch nfs share.
nämlich das hinter jeder gesyncten datei, irgendein klamauk steht
Wo? Im Dateinamen oder in den Daten der Datei selbst?
Ohne exakt verwendete Optionen von rsync und mount options des shares kann man da schlecht helfen.
an die for schleife hab ich auch schon gedacht, finde ich aber weniger elegant.
Hauptsache es funktioniert am Ende fehlerfrei face-smile.
instinctless
instinctless Sep 07, 2021 at 11:26:47 (UTC)
Goto Top
Unsere Netapp ist ein wenig älter und NFS läuft auf V3.
Wenn wir Daten auf die NFS Hybrid Shares kopieren, müssen wir das immer zwei mal machen, weil er beim ersten mal meckert wegen Permissions und Null Byte Dateien schreibt. Beim zweiten Mal gehts dann.
Dies bezieht sich allerdings nur auf
cp
mit
rsync
hauts bisweilen nicht hin.
Im Anhang sieht man auch sehr schön, die kryptischen Anhängsel der temporären Dateien die rsync erstellt.
Das Resultat bekomme ich sowohl über NFS als auch bei CIFS.
rsync
instinctless
instinctless Sep 07, 2021 at 11:27:08 (UTC)
Goto Top
Nachtrag:
Ich habe bei rsync noch die Option --inplace hinzugefügt. Nun schreibt er mir auch die Dateien, allerdings meckert er immer noch bei jeder Datei rsync: Failed to set time.
set_time
instinctless
instinctless Sep 07, 2021 at 11:37:15 (UTC)
Goto Top
rsync -av --progress --omit-dir-times --ignore-times --size-only --inplace --exclude '*.foobar' /foo /bar  

ändern an der Fehlermeldung leider auch nichts
149062
149062 Sep 07, 2021 updated at 14:30:58 (UTC)
Goto Top
Zitat von @instinctless:

rsync -av --progress --omit-dir-times --ignore-times --size-only --inplace --exclude '*.foobar' /foo /bar  

ändern an der Fehlermeldung leider auch nichts

Wie oben schon geschrieben wäre es hier erst mal sinnvoll die benutzten mount options des shares aufzulisten statt uns hier rum raten zu lassen ...
Außerdem überprüfen ob der User Eigentümer der Dateien auf dem Ziel ist und überhaupt entsprechende Rechte hat diese zu (über)schreiben

Übrigens lassen sich 3 Kommentare auch zu einem zusammenfassen.