GNU/Linux >> Tutoriels Linux >  >> Linux

Fusionner des dossiers avec Mv ?

Si j'utilise mv déplacer un dossier appelé "dossier" vers un répertoire qui contient déjà "dossier" vont-ils fusionner ou seront-ils remplacés ?

Réponse acceptée :

mv ne peut pas fusionner ou écraser des répertoires, il échouera avec le message "mv :impossible de déplacer 'a' vers 'b' :répertoire non vide" , même lorsque vous utilisez le --force option.

Vous pouvez contourner ce problème en utilisant d'autres outils (comme rsync , find , ou même cp ), mais vous devez examiner attentivement les implications :

  • rsync peut fusionner le contenu d'un répertoire dans un autre (idéalement avec le --remove-source-files option pour supprimer en toute sécurité uniquement les fichiers source qui ont été transférés avec succès, et avec l'option habituelle d'autorisation/propriété/préservation du temps -a si vous le souhaitez)
    mais il s'agit d'une opération de copie complète, et peut donc être très gourmande en disque.
  • Option actuellement préférée : Vous pouvez combiner rsync --link-dest=DIR option (pour créer des liens physiques au lieu de copier le contenu du fichier, si possible) et --remove-source-files pour obtenir une sémantique très similaire à un mv normal .
    Pour cela, --link-dest doit recevoir un chemin absolu vers la source répertoire (ou un chemin relatif depuis la destination à la source ).
    mais ceci utilise --link-dest de manière involontaire (ce qui peut ou non entraîner des complications), nécessite de connaître (ou de déterminer) le chemin absolu vers la source (en tant qu'argument de --link-dest ), et laisse à nouveau une structure de répertoire vide à nettoyer selon .
  • Vous pouvez utiliser find pour recréer séquentiellement la structure du répertoire source sur la cible, puis déplacer individuellement les fichiers réels
    mais cela doit se répéter plusieurs fois dans la source et peut rencontrer des conditions de concurrence (nouveaux répertoires créés à la source au cours du processus en plusieurs étapes)
  • cp peut créer des liens physiques (en termes simples, des pointeurs supplémentaires vers le même fichier existant), ce qui crée un résultat très similaire à une fusion mv (et est très efficace en termes d'E/S puisque seuls des pointeurs sont créés et qu'aucune donnée réelle ne doit être copiée)
    mais cela souffre à nouveau d'une condition de concurrence possible (les nouveaux fichiers à la source sont supprimés même s'ils n'ont pas été copiés à l'étape précédente)

Laquelle de ces solutions de contournement (le cas échéant) est appropriée dépendra beaucoup de votre cas d'utilisation spécifique.
Comme toujours, réfléchissez avant d'exécuter l'une de ces commandes et ayez des sauvegardes.

Connexe :Comment télécharger des dossiers de plus de 20 Go sur Dropbox sans compte Pro ?

1 :Notez que rsync --remove-source-files ne supprimera aucun répertoire, vous devrez donc faire quelque chose comme find -depth -type d -empty -delete ensuite pour se débarrasser de l'arborescence vide du répertoire source.


Linux
  1. Makefiles avec des fichiers source dans différents répertoires

  2. impossible de sourcer le script dans un répertoire courant

  3. Dois-je mettre une barre oblique après la source et la destination lors de la copie des dossiers

  4. Répertoire de changement de script shell avec variable

  5. Obtenir la taille de tous les dossiers du répertoire

Cartographie mentale open source avec Draw.io

Créer un SDN sous Linux avec open source

Commande source Linux avec exemples

Commande de CD Linux avec exemples

Comment se connecter avec Samba à Linux Active Directory

Problèmes avec la fusion des comptes cPanel