Je souhaite déplacer le contenu d'un répertoire dans un autre répertoire contenant les mêmes dossiers.
Voici un exemple:
J'ai ./backup
qui ont les répertoires base
et test
. Maintenant, je veux déplacer ces répertoires dans ./backupArchives
.
J'utilise ceci:
mv ./backup/* ./backupArchives
mais j'ai eu l'erreur
mv: cannot move './backup/base' to './backupsArchive/base': Directory not empty
J'ai essayé d'utiliser --force
, mais pas de chance. Y a-t-il un moyen de le déplacer quand les dossiers existent déjà?
Remarque: je veux juste fusionner le contenu, il n'y a pas de réécriture.
rsync
place, cela fera la fusion.Réponses:
Bien que sa page de manuel ne le documente pas,
mv
refusera de renommer un répertoire en un autre répertoire si le répertoire cible contient des fichiers. C'est une bonne chose dans votre cas, car vous finissez par vouloir fusionner le contenu de la source dans la cible, ce quimv
ne fonctionnera pas.Utilisez à la
rsync -a backup/ backupArchives/
place. Après celarm -rf backup/*
.Au lieu d'utiliser
rsync
, vous pouvez également faire le classiquece qui vous rapporte plus de points geek.
la source
rm -rf backupArchives
sans conséquences, sans parler des conséquences «horribles».sudo sh -c '(cd backup && tar c .) | (cd backupArchives && tar xf -)'
Rapide et sale, si vous savez ce que vous faites:
la source
Après le répertoire que vous déplacez vous avez besoin
*
(représente n'importe quel texte ou nombre). Par exemple:C’est tout, si vous déplacez des fichiers, que vous vous déplacez en tant que:
mv /var/www/index.php /recovery/index.php
Une autre méthode consiste à compresser le contenu de ce dossier à l'aide de tar:
Puis déplacez-le dans un autre fichier. Aussi, je recommande cette étape car tar le compresse et le rend plus petit.
Pour extraire les fichiers dans un autre dossier, utilisez
Si vous avez besoin de copier vers un emplacement que vous ne possédez pas, veillez à bien ajouter votre commande avec la
sudo
commande après l'option que vous décidez d'utiliser.la source
-R
ne devrait sûrement pas venir après le premier argument. Les options (presque) précèdent toujours les arguments de la commande. En outre,mv
n’a pas d’-R
option, et enfin, la récursivité n’a aucune incidence sur amv
. @ DimitrisTheodoridis, veuillez d'abord tester votre réponse.Bien sûr,
rsync
cela fonctionne, mais cela pourrait également fonctionner pour une machine qui ne supporte pasrsync
(par exemple, dans cpanel, où rsync n’est pas installé par défaut).Qu'en est-il d'utiliser:
Puis supprimez le
backup
répertoire si nécessaireNote1: Vous devez accéder
cd
aubackup
répertoire avant d’exécuter lecp -R --parents ...
Note2: Vérifiez le
backupArchives
répertoire si vous avez récupéré les nouveaux fichiers.la source
Avant de poser la question, considérons un cas simplifié.
Supposons que dans / home / admin nous avons deux dossiers
foo
etbar
qui ont la même structure de sous - répertoire, mais chacun contient des fichiers différents en elle. Maintenant, nous voulons les fusionner en un seul. Lorsque nous faisons des choses commemv foo/* bar
, l'erreurmv: directory not empty
se produit.Ma solution consiste à abandonner les outils de ligne de commande et à basculer vers un gestionnaire de fichiers à interface graphique, par exemple, Dolphin. Lorsque vous renommez
foo
àbar
Dolphin, il vous donne la possibilité d'écrire dans le dossier de destination, et vous demande si vous souhaitez écraser les fichiers existants, de manière interactive. Cela évite les copies et les suppressions, ce qui vous permet de gagner du temps sans une seule ligne de code.PS: Je n'ai pas testé tous les gestionnaires de fichiers. Mais la plupart d'entre eux devraient avoir cette fonctionnalité.
la source