Zweck von cp -x (im Dateisystem bleiben)?

25

Wenn ich auf demselben Dateisystem bleiben möchte, kann ich dann nicht einfach einen Ausgabepfad für dasselbe Dateisystem angeben?

Oder soll das versehentliche Verlassen des aktuellen Dateisystems verhindert werden?

neverMind9
quelle
1
-x in einem anderen Kontext: unix.stackexchange.com/a/358331/30851 aber dasselbe für cp: -x überspringt Dinge, wenn Sie Dateisysteme migrieren und möchten, dass es eine vollständige Kopie ist Sie das ganze Bild.
Frostschutz
1
Sie könnten dasselbe nach vielen Flags fragen, zB -i: "Warum nicht einfach ein nicht existierendes Ziel angeben?"
JigglyNaga
1
@JigglyNaga Das habe ich mir auch gedacht. Aber -x war in der Dokumentation nicht gut formuliert und weit weniger offensichtlich.
NeverMind9

Antworten:

59

Es begrenzt , wo die Dateien kopiert werden , aus , nicht , wo sie kopiert sind. Es ist nützlich bei rekursiven Kopien, um zu steuern, wie cpin Unterverzeichnisse absteigend. Somit

cp -xr / blah

kopiert nur das Root-Dateisystem, keines der anderen gemounteten Dateisysteme.

Siehe die cp -xDokumentation (obwohl die Unterscheidung subtil ist).

Stephen Kitt
quelle
3
Oh ja, Sie möchten möglicherweise keine Netzwerkfreigaben unter / mnt kopieren. Noch ein Remote-RCS-Repository, das unter Ihrem Home-Laufwerk eingehängt ist.
McKenzm
1
@mckenzm Auch, weil /mntnur eine menschliche Konvention manchmal durch das Setup einer Distribution durchgesetzt wird, aber keine Anforderung des Betriebssystems. Ich habe manchmal Netzwerk-Dateisysteme gemountet /var/somewebsite/www/sessions, um Lastausgleich-Webserver zu implementieren
slebetman
In der Tat verhindert diese Art von Flag, dass versehentlich große Netzwerkfreigaben oder Wechselmedien kopiert werden, die Sie vergessen haben, gemountet zu haben. Sie müssen keine --excludeOptionen angeben, um sie manuell zu blockieren. Sehr nützlich mit rsync.
Lassi
3
Es vermeidet auch das Kopieren von Dateisystemen wie /dev, /proc, /sysetc. , die Sie in der Regel nicht wollen , „en masse“ zu lesen.
Stephen Kitt
28

Das -xFlag to cpist eine GNU-Erweiterung. Wenn Sie eine einzelne Datei kopieren, hat diese Option keine Auswirkung. Wenn Sie jedoch eine gesamte Dateihierarchie kopieren, -xverhindert die Option, dass Dateien und Verzeichnisse kopiert werden, die nicht auf demselben Dateisystem wie die ursprüngliche Quelle gespeichert sind.

Zum Beispiel würde auf einem Dateisystem mit Einhängepunkten an /usrund /usr/localunter Verwendung cp -xR /usr /some-destder Hierarchie nicht kopiert /usr/local.

Es gibt auch andere Dienstprogramme , die mit einer -xOption mit ähnlicher Semantik, wie duund find(das Flag genannt -xdevfür find), und rsync.

Kusalananda
quelle