Verschieben Sie Dateien und ändern Sie gleichzeitig den Eigentümer

23


Gibt es unter Linux (Debian, Ubuntu Mint ...) einen Optionsbefehl oder etwas, mit dem ich Dateien auf einen anderen Benutzer übertragen kann, ohne dies tun zu müssen:

sudo mv /home/poney/folderfulloffiles /home/unicorn/
sudo chown -R unicorn:unicorn /home/unicorn/folderfulloffiles
Kiwy
quelle

Antworten:

30

Verwendung rsync(1):

rsync \
  --remove-source-files \
  --chown=unicorn:unicorn \
    /home/poney/folderfulloffiles /home/unicorn/
Dawud
quelle
4
Danke @dawud - das ist mein tägliches "Zeug, das ich nicht wusste und nicht verstehen kann, wie ich es verpasst habe"
Jenny D
1
@JennyD Vielleicht möchten Sie auch einen Blick auf die Optionen usermapund werfen groupmap.
Dawud
2
Aber das ist es nicht mv, oder? Nur Kopien? Oder macht es mvdas?
mikeserv
@ MikeServ ordnungsgemäß zur Kenntnis genommen, siehe meine Bearbeitung
Dawud
11

Laut @ Kevin in den Kommentaren unten ist die --file - |pipeSyntax redundant. Also habe ich es entfernt.

Dies kann auch gemacht werden mit tar:

sudo tar -C${SRC_DIR} --remove-files --group=unicorn --owner=unicorn -c ./* | 
    sudo tar -C${TGT_DIR} -pvx
mikeserv
quelle
Ziemlich sicher, dass das -f -an beiden Enden impliziert ist.
Kevin
1
@ Kevin Nicht hier. Hier ist es angegeben.
mikeserv
Ja, Sie haben es angegeben, aber es ist nicht erforderlich. Ihr Befehl funktioniert gut ohne das f -Teil.
Kevin
8
s=/home/poney/; f=folderfulloffiles; d=/home/unicorn/ 
sudo mv $s$f $d && sudo chown -R unicorn:unicorn $d$f

Ungefähr so ​​lang wie die anderen Antworten, und da sie alle dieselben Bibliotheksaufrufe verwenden, tun sie alle genau dasselbe - es sei denn, Gilles merkt an, dass sich diese auf demselben Dateisystem und Gerät befinden In diesem Fall mvhandelt es sich wirklich um eine Umbenennung, die es effizienter macht als rsyncoder tar.

Goldlöckchen
quelle
Es ist nicht ein :statt ein .beim Umgang mit chown?
Kiwy
2
Hmmm - interessant. So ist es in der Manpage, aber ich habe immer einen Punkt verwendet. Sieht so aus, als hätten sie es vor etwa einem Jahrzehnt aus der GNU-Manpage entfernt , weil es nicht POSIX-portabel ist. Funktioniert zwar noch (mit dem von GNU Coreutils unter Linux), aber ich werde das oben ändern.
Goldlöckchen
1
chowndauert normalerweise beide :und ..
slm
1
Sie könnten es etwas kürzer machen: nu=unicorn h=/home f=folderfulloffiles ; sudo mv $h/poney/$f $h/$nu/$f ; sudo chown -R ${nu}:$nu $_- obwohl das kaum der Grund für Ihre Antwort ist, was gut ist und ich bereits abgestimmt habe.
mikeserv
3
Diese Lösung hat den Vorteil, dass, wenn sich Quelle und Ziel im selben Dateisystem befinden, die Datei verschoben und nicht kopiert und das Original gelöscht wird.
Gilles 'SO- hör auf böse zu sein'