Das Problem ist, dass ich Fehler beim Verschieben einer Datei sehen möchte, aber keine Fehler mit Berechtigungsproblemen. Mit anderen Worten: Es ist mir wichtig, dass die Datei nicht vollständig übertragen wird, aber Fehler wie diese nicht angezeigt werden sollen:
mv: Besitz für "/home/blah/backup/pgsql.tar.gz" konnte nicht beibehalten werden: Vorgang nicht zulässig
Deshalb möchte ich so etwas wie: mv $backupfile $destination --ignore-permissions
.
Die Sicherungsdatei kann zwischen 1 und 5 MB groß sein und wird über NFS übertragen.
cifs
).Antworten:
mv
ist das falsche Werkzeug für diesen Job; du willstcp
und dannrm
. Da Sie die Datei in ein anderes Dateisystem verschieben,mv
geschieht dies ohnehin genau hinter den Kulissen, mit dem Unterschied, dassmv
auch versucht wird, Dateiberechtigungsbits und Eigentümer- / Gruppeninformationen beizubehalten. Dies liegt daranmv
, dass diese Informationen erhalten bleiben, wenn eine Datei innerhalb desselben Dateisystems verschoben wird undmv
versucht wird, sich in beiden Situationen gleich zu verhalten. Verwenden Sie dieses Tool nicht, da es Ihnen egal ist, ob Dateiberechtigungsbits und Eigentümer- / Gruppeninformationen erhalten bleiben. Verwenden Sie stattdessencp --no-preserve=mode
undrm
.quelle
cp --no-preserve=mode,ownership $backupfile $destination
überprüfe den Exit-Code und tue dann,rm $backupfile
ob alles in Ordnung ist.Wenn Sie eine Datei innerhalb desselben Dateisystems verschieben, wird
mv
die Datei vom alten Speicherort getrennt und an den neuen Speicherort angehängt. Metadaten wie Berechtigungen bleiben unverändert. Wenn Sie eine Datei in ein anderes Dateisystem verschieben, kopieren Siemv
die Datei, versuchen, so viele Metadaten wie möglich zu replizieren, und entfernen Sie das Original.Da Sie in ein anderes Dateisystem wechseln und nicht viele Metadaten replizieren möchten, können Sie die Datei auch kopieren und dann das Original entfernen.
Dadurch bleiben die Berechtigungen der Datei in gewissem Umfang erhalten (z. B. Lesbarkeit in der Welt, Ausführbarkeit). Die Änderungszeit der Datei wird nicht beibehalten. Mit GNU
cp
können Sie mit der--preserve=…
Option steuern, welche Metadaten feiner repliziert werden, z--preserve=mode,timestamps
.Sie können es auch verwenden
rsync
und angeben, was Sie beibehalten möchten. Die Option-a
bedeutet, dass die meisten Metadaten erhalten bleiben, einschließlich des Eigentümers, wenn er nur als Root ausgeführt wird.quelle
rsync
Lösung funktioniert hervorragend. Ich hatte Mühe, meine alte Ubuntu-Installation von der CIFS-Freigabe zu übertragen. Mein rsync meldete keinen Fehler beim Verschieben der Datei, aber nicht beim Verschieben und meldete nur Berechtigungsprobleme.rsync
Lösung!