Déplacer des fichiers et changer de propriétaire en même temps

23

Sous Linux (Debian, Ubuntu Mint ...),
Existe - t-il une commande d'option ou quelque chose que je peux utiliser pour transférer des fichiers vers un autre utilisateur sans avoir à faire:

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

Réponses:

30

Utilisation rsync(1):

rsync \
  --remove-source-files \
  --chown=unicorn:unicorn \
    /home/poney/folderfulloffiles /home/unicorn/
dawud
la source
4
Merci @dawud - c'est mon quotidien "des trucs que je ne savais pas et ne peux pas comprendre comment j'ai raté ça"
Jenny D
1
@JennyD vous pouvez jeter un oeil à la usermapet groupmapoptions.
dawud
2
Mais ce n'est pas mvça, non? Seulement des copies? Ou est-ce mvcela?
mikeserv du
@mikeserv dûment noté, voir mon montage
dawud
11

Selon @Kevin dans les commentaires ci-dessous, la --file - |pipesyntaxe est redondante. Je l'ai donc supprimé.

Cela peut également être fait avec tar:

sudo tar -C${SRC_DIR} --remove-files --group=unicorn --owner=unicorn -c ./* | 
    sudo tar -C${TGT_DIR} -pvx
mikeserv
la source
Je suis presque sûr que cela -f -est implicite aux deux extrémités.
Kevin
1
@Kevin Pas ici. Ici, c'est spécifié.
mikeserv
Oui, vous l'avez spécifié, mais ce n'est pas nécessaire. Votre commande fonctionne bien sans la f -pièce.
Kevin
8
s=/home/poney/; f=folderfulloffiles; d=/home/unicorn/ 
sudo mv $s$f $d && sudo chown -R unicorn:unicorn $d$f

À peu près de la même longueur que les autres réponses, et notez qu'ils utilisent tous les mêmes appels de bibliothèque sous le capot, ils font tous exactement la même chose - sauf, comme le note Gilles, sur le même système de fichiers et le même appareil , auquel cas il mvs'agit vraiment d'un renommage, ce qui le rend plus efficace que rsyncor tar.

boucle d'or
la source
Ce n'est pas un :au lieu d'un .quand il s'agit de chown?
Kiwy
2
Hmmm - intéressant. C'est comme ça dans la page de manuel, mais j'ai toujours utilisé un point. On dirait qu'ils l'ont retiré de la page de manuel GNU il y a une dizaine d'années car ce n'est pas POSIX portable. Fonctionne toujours cependant (avec le chown de GNU coreutils sur linux), mais je vais changer cela ci-dessus.
goldilocks
1
chownprend généralement les deux :et ..
slm
1
Vous pourriez le faire un peu plus court: nu=unicorn h=/home f=folderfulloffiles ; sudo mv $h/poney/$f $h/$nu/$f ; sudo chown -R ${nu}:$nu $_- bien que ce ne soit pas le but de votre réponse, ce qui est bien et j'ai déjà voté positivement.
mikeserv
3
Cette solution présente l'avantage que si la source et la destination se trouvent sur le même système de fichiers, le fichier est déplacé plutôt que copié et l'original est effacé.
Gilles 'SO- arrête d'être méchant'