Mueva archivos y cambie la propiedad al mismo tiempo

23

En Linux (Debian, Ubuntu Mint ...),
¿hay algún comando de opción o algo que pueda usar para transferir archivos a otro usuario sin tener que hacer:

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

Respuestas:

30

Uso rsync(1):

rsync \
  --remove-source-files \
  --chown=unicorn:unicorn \
    /home/poney/folderfulloffiles /home/unicorn/
Dawud
fuente
44
Gracias @dawud: este es mi "material diario que no sabía y no puedo entender cómo lo extrañé"
Jenny D
1
@JennyD es posible que desee echar un vistazo a la usermapy groupmapopciones también.
dawud
2
Pero esto no es mvasí, ¿verdad? Solo copias? O lo mvhace?
mikeserv
@mikeserv debidamente anotado, vea mi edición
dawud
11

Según @Kevin en los comentarios a continuación, la --file - |pipesintaxis es redundante. Entonces lo quité.

Esto también se puede hacer con tar:

sudo tar -C${SRC_DIR} --remove-files --group=unicorn --owner=unicorn -c ./* | 
    sudo tar -C${TGT_DIR} -pvx
mikeserv
fuente
Bastante seguro de que -f -está implícito en ambos extremos.
Kevin
1
@ Kevin No aquí. Aquí se especifica.
mikeserv
Sí, lo especificó, pero no es necesario. Su comando funciona bien sin la f -parte.
Kevin
8
s=/home/poney/; f=folderfulloffiles; d=/home/unicorn/ 
sudo mv $s$f $d && sudo chown -R unicorn:unicorn $d$f

Aproximadamente la misma longitud que las otras respuestas, y tenga en cuenta que, dado que todos usan las mismas llamadas de biblioteca bajo el capó, todos están haciendo exactamente lo mismo, a menos que, como señala Gilles, esto esté en el mismo sistema de archivos y dispositivo , en cuyo caso mves realmente un cambio de nombre, lo que lo hace más eficiente que rsynco tar.

encerrada dorada
fuente
¿No es un en :lugar de un .cuando se trata chown?
Kiwy
2
Hmmm, interesante. Es así en la página del manual, pero siempre he usado un punto. Parece que lo sacaron de la página de manual de GNU hace aproximadamente una década porque no es POSIX portátil. Sin embargo, todavía funciona (con el chown de GNU coreutils en Linux), pero lo cambiaré anteriormente.
Ricitos
1
chownnormalmente toma ambos :y ..
slm
1
Podrías hacerlo un poco más corto: nu=unicorn h=/home f=folderfulloffiles ; sudo mv $h/poney/$f $h/$nu/$f ; sudo chown -R ${nu}:$nu $_aunque ese no es el punto de tu respuesta, lo cual es bueno y ya he votado.
mikeserv
3
Esta solución tiene la ventaja de que si el origen y el destino están en el mismo sistema de archivos, el archivo se mueve en lugar de copiarse y el original se borra.
Gilles 'SO- deja de ser malvado'