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

Réponses:


30

Utilisation rsync(1):

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

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

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.


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'
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.