237 votes

mv : Répertoire non vide

Je veux 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 a les répertoires base y test . Maintenant, je veux déplacer ces répertoires vers ./backupArchives .

J'utilise ceci :

mv ./backup/* ./backupArchives

mais j'ai obtenu l'erreur

mv: cannot move './backup/base' to './backupsArchive/base': Directory not empty

J'ai essayé d'utiliser --force mais pas de chance. Existe-t-il un moyen de le déplacer lorsque les dossiers existent déjà ?

Note : Je veux juste fusionner les contenus, il n'y a pas d'écrasement.

282voto

zwets Points 11050

Bien que sa page de manuel ne le documente pas, mv refusera de renommer un répertoire vers un autre répertoire si le répertoire cible contient des fichiers. C'est une bonne chose dans votre cas, car il s'avère que vous souhaitez fusionner le contenu de la source dans la cible, ce qui permet d'éviter les erreurs. mv ne fera pas l'affaire.

Utilice rsync -a backup/ backupArchives/ au lieu de cela. Après cela, les rm -rf backup/* .

Au lieu d'utiliser rsync Vous pouvez également utiliser la méthode classique

(cd backup && tar c .) | (cd backupArchives && tar xf -)

ce qui vous fait gagner encore plus de points de geek.

67voto

pattivacek Points 877

Il s'agit d'une solution rapide et pratique, à condition de savoir ce que l'on fait :

cp -r ./backup/* ./backupArchives && rm -R ./backup/*

8voto

Disco Points 156

Après le répertoire que vous déplacez, vous avez besoin de * (représente n'importe quel texte ou nombre). Par exemple :

mv /var/www/* /recovery/wwwrecovery/

C'est tout, si vous déplacez des fichiers, vous les déplacez en tant que :

mv /var/www/index.php /recovery/index.php

Une autre façon de procéder est d'emballer le contenu de ce dossier à l'aide de tar :

tar -cvzpf backup.tar.gz /var/www 

Ensuite, déplacez-le comme n'importe quel autre fichier. Je recommande également cette étape car tar compresse le fichier et le rend plus petit.

Pour extraire les fichiers vers un autre dossier, utilisez

tar -xvzpf /var/www/

Si vous devez copier vers un emplacement qui ne vous appartient pas, assurez-vous de faire précéder votre commande de l'option sudo après l'option choisie.

sudo tar -cvzpf backup.tar.gz /var/www/

4voto

Atillo Regner Rex Points 233

Bien sûr, c'est une évidence rsync fonctionne, mais cela pourrait également fonctionner pour les machines qui ne supportent pas l'option rsync (c'est-à-dire dans cpanel, où rsync n'est pas installé par défaut).

Qu'en est-il de l'utilisation de :

cd /path/to/backup/ && cp -R --parents ./* ../backupArchives

Retirez ensuite le backup si nécessaire

Note1 : Vous devez cd à la backup avant d'exécuter la commande cp -R --parents ...

Note2 : Vérifier deux fois le backupArchives si vous avez récupéré les nouveaux fichiers à partir de la sauvegarde.

1voto

shawty Points 2429

Avant de poser la question, considérons un cas simplifié.

Supposons que dans /home/admin nous ayons deux dossiers foo y bar qui ont la même structure de sous-répertoire, mais qui contiennent chacun des fichiers différents. Nous voulons maintenant les fusionner en un seul. Lorsque nous faisons des choses comme mv foo/* bar l'erreur mv: directory not empty se produit.

Ma solution est d'abandonner les outils de ligne de commande et de passer à un gestionnaire de fichiers à interface graphique, par exemple, dolphin. Lorsque vous renommez foo à bar dans dolphin, il vous donne la possibilité d'écrire dans le dossier de destination et vous demande si vous voulez écraser les fichiers existants, de manière interactive. Cela évite de copier et d'effacer, ce qui permet de gagner du temps sans une seule ligne de code.

PS : Je n'ai pas testé tous les gestionnaires de fichiers existants. Mais la plupart d'entre eux devraient disposer de cette fonctionnalité.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X