Sposta i file e cambia la proprietà allo stesso tempo


23

Su Linux (Debian, Ubuntu Mint ...),
c'è qualche comando di opzione o qualcosa che posso usare per trasferire file a un altro utente senza dover fare:

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

Risposte:


30

Utilizzare rsync(1):

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

4
Grazie @dawud - questa è la mia "roba quotidiana che non sapevo e non riesco a capire come mi sono perso"
Jenny D

1
@JennyD si potrebbe desiderare di dare un'occhiata al usermape groupmapopzioni.
Dawud,

2
Ma non è mvcosì, vero? Solo copie? O lo mvfa?
Mikeserv,

@mikeserv debitamente notato, vedi la mia modifica
dawud

11

Per @Kevin nei commenti seguenti, la --file - |pipesintassi è ridondante. Quindi l'ho rimosso.

Questo può essere fatto anche con tar:

sudo tar -C${SRC_DIR} --remove-files --group=unicorn --owner=unicorn -c ./* | 
    sudo tar -C${TGT_DIR} -pvx

Abbastanza sicuro che -f -sia implicito su entrambe le estremità.
Kevin,

1
@Kevin Non qui. Qui è specificato.
Mikeserv,

Sì, l'hai specificato, ma non è necessario. Il tuo comando funziona bene senza 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

Circa della stessa lunghezza delle altre risposte e nota dal momento che usano tutte le stesse chiamate in libreria sotto il cofano, stanno facendo esattamente la stessa cosa - a meno che, come nota Gilles, questo sia sullo stesso filesystem e dispositivo , nel qual caso mvè davvero una ridenominazione, che lo rende più efficiente di rsynco tar.


Non è un :invece di un .quando hai a che fare chown?
Kiwy,

2
Hmmm - interessante. È così nella pagina man, ma ho sempre usato un punto. Sembra che lo abbiano tolto dalla pagina man GNU circa un decennio fa perché non è POSIX portatile. Funziona comunque (con il chown dei coreutils GNU su Linux), ma lo cambierò sopra.
Goldilocks

1
chownprende in genere entrambi :e ..
slm

1
Potresti farlo un po 'più breve: nu=unicorn h=/home f=folderfulloffiles ; sudo mv $h/poney/$f $h/$nu/$f ; sudo chown -R ${nu}:$nu $_- sebbene non sia questo il punto della tua risposta, il che è positivo e ho già votato.
Mikeserv,

3
Questa soluzione ha il vantaggio che se l'origine e la destinazione si trovano sullo stesso filesystem, il file viene spostato anziché copiato e l'originale cancellato.
Gilles 'SO- smetti di essere malvagio' il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.