Mover arquivos e alterar a propriedade no mesmo horário

23

No Linux (Debian, Ubuntu Mint ...),
Existe algum comando de opção ou algo que eu possa usar para transferir arquivos para outro usuário sem ter que fazer:

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

Respostas:

30

Use rsync(1):

rsync \
  --remove-source-files \
  --chown=unicorn:unicorn \
    /home/poney/folderfulloffiles /home/unicorn/
dawud
fonte
4
Graças @dawud - este é o meu diário "coisas que eu não sabia e não consigo entender como eu perdi"
Jenny D
11
@ JennyD, você pode querer dar uma olhada nas opções usermape groupmaptambém.
Dawud
2
Mas não mvé verdade? Apenas cópias? Ou faz mvisso?
mikeserv
@mikeserv devidamente anotado, ver a minha edição
Dawud
11

Por @Kevin nos comentários abaixo, a --file - |pipesintaxe é redundante. Então eu o removi.

Isso também pode ser feito com tar:

sudo tar -C${SRC_DIR} --remove-files --group=unicorn --owner=unicorn -c ./* | 
    sudo tar -C${TGT_DIR} -pvx
mikeserv
fonte
Certamente, isso -f -está implícito nas duas extremidades.
22414 Kevin
11
@ Kevin Não aqui. Aqui está especificado.
mikeserv
Sim, você especificou, mas não é necessário. Seu comando funciona bem sem a f -peça.
Kevin
8
s=/home/poney/; f=folderfulloffiles; d=/home/unicorn/ 
sudo mv $s$f $d && sudo chown -R unicorn:unicorn $d$f

Aproximadamente o mesmo comprimento das outras respostas, e observe que, todos eles usam as mesmas chamadas de biblioteca ocultas, todos estão fazendo exatamente a mesma coisa - a menos que, como Gilles observa, isso esteja no mesmo sistema de arquivos e dispositivo , nesse caso, mvé realmente uma renomeação, o que a torna mais eficiente que rsyncou tar.

Cachinhos Dourados
fonte
Não é um em :vez de um .quando se lida com chown?
Kiwy
2
Hummm - interessante. É assim na página de manual, mas eu sempre usei um ponto. Parece que eles o tiraram da página de manual do GNU cerca de uma década atrás, porque não é portátil POSIX. Ainda funciona (com o chown do GNU coreutils no linux), mas vou mudar isso acima.
Goldilocks
11
chownnormalmente leva ambos :e ..
Slm
11
Você poderia fazê-lo um pouco mais curto: nu=unicorn h=/home f=folderfulloffiles ; sudo mv $h/poney/$f $h/$nu/$f ; sudo chown -R ${nu}:$nu $_- embora esse não seja o ponto da sua resposta, o que é bom e eu já votei.
mikeserv
3
Esta solução tem a vantagem de que, se a origem e o destino estiverem no mesmo sistema de arquivos, o arquivo será movido em vez de copiado e o original apagado.
Gilles 'SO- stop be evil'