web-dev-qa-db-fra.com

Comment déplacer (et écraser) tous les fichiers d'un répertoire à un autre?

Je connais la commande mv pour déplacer un fichier d'un endroit à un autre, mais comment puis-je déplacer tous les fichiers d'un répertoire à un autre (qui contient de nombreux autres fichiers), en écrasant le fichier s'il existe déjà?

14
Chris

C'est juste mv srcdir/* targetdir/.

S'il y a trop de fichiers dans srcdir, vous pouvez essayer quelque chose comme l'approche suivante:

cd srcdir
find -exec mv {} targetdir/ +

Contrairement à \;, le + final collecte les arguments d'une manière semblable à xargs au lieu d'exécuter mv une fois pour chaque fichier.

11
musiKk

Pour déplacer et écraser des fichiers, il ne semble pas exister l'option -R (en cas de doute, vérifiez vos options en tapant [your_cmd] --help. Cette réponse dépend également de la façon dont vous souhaitez déplacer votre fichier. remplacer les fichiers à la destination, etc.

Lorsque vous tapez mv --help, la description de toutes les options est renvoyée.

Pour mv, la syntaxe est mv [option] [file_source] [file_destination]

Pour déplacer des fichiers simples: mv image.jpg folder/image.jpg

Pour déplacer un dossier dans la destination mv folder home/folder

Pour déplacer tous les fichiers du source vers la distination mv folder/* home/folder/

Utilisez -v si vous voulez voir ce qui se fait: mv -v

Utilisez -i pour demander avant d'écraser: mv -i

Utilisez -u pour mettre à jour les fichiers de la destination. Il ne déplacera que les fichiers source plus récents que le fichier de la destination, et s’il n’existe pas encore: mv -u

Nouez les options ensemble comme mv -viu, etc.

4
iSkore

C'est également possible en utilisant rsync, par exemple:

rsync -va --delete-after src/ dst/

où:

  • -v, --verbose: augmenter la verbosité
  • -a, --archive: mode archive; est égal à -rlptgoD (no -H,-A,-X)
  • --delete-after: supprimer les fichiers du côté destinataire une fois le transfert terminé

Si vous avez des privilèges root, préfixez Sudo pour remplacer les problèmes d’autorisation potentiels.

1
kenorb
mv -f source target

De la page de manuel:

-f, --force
          do not Prompt before overwriting
1
David Parks

Dans Linux Shell, de nombreuses commandes acceptent plusieurs paramètres et peuvent donc être utilisées avec des caractères génériques. Ainsi, par exemple, si vous souhaitez déplacer tous les fichiers du dossier A vers le dossier B, vous écrivez:

mv A/* B

Si vous voulez déplacer tous les fichiers avec un certain "look", vous pouvez faire comme ceci:

mv A/*.txt B

Qui copie tous les fichiers blablabla.txt dans le dossier B

Star (*) peut substituer un nombre quelconque de caractères ou de lettres pendant que? peut en substituer un. Par exemple, si vous avez plusieurs fichiers sous la forme numéro_fichier.ext et que vous souhaitez déplacer uniquement ceux qui ont un nombre à deux chiffres, vous pouvez utiliser une commande comme celle-ci:

mv A/file_??.ext B

Ou des exemples plus compliqués:

mv A/fi*_??.e* B

Pour les fichiers qui ressemblent à fi <-quelque chose -> _ <- deux caractères ->. E <-quelque chose->

Contrairement à de nombreuses commandes dans Shell qui demandent à -R (par exemple) de copier ou de supprimer des sous-dossiers, mv le fait lui-même.

Rappelez-vous que mv écrase sans rien demander (à moins que les fichiers en cours d'écriture soient en lecture seule ou que vous n'en ayez pas l'autorisation), assurez-vous de ne rien perdre au cours du processus.

Pour votre information future, si vous avez des sous-dossiers à copier, vous pouvez utiliser l'option -R, en indiquant que vous souhaitez exécuter la commande de manière récursive. Cela ressemblerait à quelque chose comme ça:

cp A/* B -R

Au fait, tout ce que j'ai dit fonctionne aussi avec rm (remove, delete) et cp (copy), mais méfiez-vous, car une fois que vous avez supprimé, vous ne pouvez plus revenir en arrière! Évitez les commandes telles que rm * -R sauf si vous êtes sûr de ce que vous faites.

0
Shahbaz

Si vous devez simplement répondre "y" à toutes les invites de remplacement, essayez ceci: 

y | mv srcdir/* targetdir/
0
blizz