mv: répertoire non vide

119

Je veux déplacer le contenu d’un répertoire dans un autre répertoire avec les mêmes dossiers.

Voici un exemple:

J'ai ./backup qui a 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. Est-il possible de le déplacer lorsque des dossiers existent déjà?

Note: je veux juste fusionner le contenu, il n'y a pas de remplacement.

    
posée UdK 19.03.2013 - 05:11
la source

5 réponses

156

Bien que sa page de manuel ne le documente pas, mv refusera de renommer un répertoire dans un autre répertoire si le répertoire cible contient des fichiers. C'est une bonne chose dans votre cas, car vous voulez fusionner le contenu de la source dans la cible, ce que mv ne fera pas.

Utilisez plutôt rsync -a backup/ backupArchives/ . Après cela rm -rf backup/* .

Au lieu d'utiliser rsync , vous pouvez aussi faire le classique

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

qui vous rapporte plus de points de geek.

    
réponse donnée zwets 19.03.2013 - 08:51
la source
24

Rapide et sale, si vous savez ce que vous faites:

cp -r ./backup/* ./backupArchives && rm -R ./backup/*
    
réponse donnée patrickvacek 10.10.2013 - 18:07
la source
3

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

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

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

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

Une autre façon consiste à emballer le contenu de ce dossier en utilisant tar:

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

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

Pour extraire les fichiers dans un autre dossier, utilisez

tar -xvzpf /var/www/

Si vous devez copier vers un emplacement que vous ne possédez pas, veillez à ajouter votre commande avec la commande sudo après l’option que vous décidez d’utiliser.

sudo tar -cvzpf backup.tar.gz /var/www/
    
réponse donnée Dimitris Theodoridis 19.03.2013 - 05:27
la source
2

Bien sûr, rsync fonctionne, mais cela pourrait aussi bien fonctionner pour une machine qui ne prend pas en charge rsync (c.-à-d. dans cpanel, dont rsync n'est pas installé par défaut).

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

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

Supprimez ensuite le répertoire backup si nécessaire

Note 1: Vous devez cd dans le répertoire backup avant d'exécuter cp -R --parents ...

Note 2: Vérifiez le répertoire backupArchives si vous avez récupéré les nouveaux fichiers de la sauvegarde.

    
réponse donnée Atillo Regner Rex 03.03.2017 - 08:45
la source
1

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

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

Ma solution consiste à abandonner les outils de ligne de commande et à passer à un gestionnaire de fichiers GUI, par exemple, dauphin. Lorsque vous renommez foo en bar dans dolphin, vous avez la possibilité d'écrire dans le dossier de destination et vous demande si vous souhaitez remplacer les fichiers existants de manière interactive. Cela évite la copie et la suppression, ce qui en fait économise votre 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é.

    
réponse donnée navigaid 12.10.2016 - 11:22
la source

Lire d'autres questions sur les étiquettes