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

Respostas:


30

Use rsync(1):

rsync \
  --remove-source-files \
  --chown=unicorn:unicorn \
    /home/poney/folderfulloffiles /home/unicorn/

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

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.


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'
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.