Question mv: répertoire non vide


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 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 l'erreur

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

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

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


124
2018-03-19 04:11


origine


Essayez-vous simplement de fusionner le contenu des dossiers dans la destination ou essayez-vous de remplacer ce qui se trouve dans la destination? (cela aide aussi si vous avez l’erreur ENTIRE, sans utiliser ...... pour tronquer les données) - Thomas Ward♦
Je veux juste fusionner le contenu, il n'y a pas de réécriture. - UdK
@UdK Même si cela fonctionne, notez que cela ne pas fusionner le contenu des deux répertoires. Déplacer un répertoire remplacera sa cible. Jettes un coup d'oeil à rsync au lieu de cela, il fera la fusion. - zwets


Réponses:


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 parce que vous voulez fusionner le contenu de la source dans la cible, qui mv ne fera pas.

Utilisation rsync -a backup/ backupArchives/ au lieu. Après ça rm -rf backup/*.

À la place d'utiliser rsync, vous pouvez aussi faire le classique

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

ce qui vous rapporte plus de points de geek.


159
2018-03-19 07:51



Bonnes choses à savoir! Les deux fonctionnent très bien. Merci! - UdK
Les points de geek sont les meilleurs points: D - MadMike
il convient de noter que cela nécessite que vous ayez la taille du dossier dans l'espace libre. Et causera des problèmes horribles, sinon. - Pogrindis
@Pogrindis S'il vous plaît expliquer ce que horrible des problèmes se produiront, et comment sont-ils différents de toute autre tentative d'écriture sur un disque complet? En effet, les deux opérations gardent le répertoire d'origine intact, si l'opération vous échoue simplement rm -rf backupArchives sans conséquences, sans parler de celles «horribles». - zwets
Merci d'avoir nommé l'approche classique, très utile si rsync n'est pas disponible! Fonctionne également avec sudo en utilisant sudo sh -c '(cd backup && tar c .) | (cd backupArchives && tar xf -)' - ArendE


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

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

24
2017-10-10 16:07



Fonctionne également dans mon mode de sécurité, génial. - Banned_User


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

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

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

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

Une autre méthode consiste à emballer le contenu de ce dossier en utilisant tar:

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

Puis déplacez-le tout autre fichier. Je recommande également cette étape car le goudron le comprime 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 que vous ne possédez pas, assurez-vous d’ajouter votre commande au sudo commande après l'option que vous décidez d'utiliser.

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

3
2018-03-19 04:27



J'utilise Ubuntu 12.10 et j'ai: mv: option invalide - 'R' Essayez `mv --help 'pour plus d'informations. En effet, .tar est sympa, mais je dois savoir comment déplacer mes fichiers pour cette situation. Merci de votre aide - UdK
En utilisant 12.04 desktop et server et dans les deux fonctionne bien. soyez prudent, si vous n'avez pas fait de la place entre fonfer et -R. J'ai également essayé sans-R fonctionne de la même manière pour moi, essayez sans -R, mais soyez prudent avec l'orthographe: linux compte des lettres majuscules et minuscules !!! que si le chemin est incohérent en déplacement ou en déplacement depuis un lieu. Si vous ne disposez pas de ce dossier que vous souhaitez déplacer, placez-le juste après et il le créera. essayez aussi d'abord: find -iname nom de votre dossier  et lancez cette commande à partir de root, juste pour voir si elle existe ailleurs si vous manquez quelque chose. donne-moi la commande exacte que tu as utilisée - Dimitris Theodoridis
ce que thaaa ..... a mis ce nom de fichier entre ** - Dimitris Theodoridis
Cette -R ne devrait sûrement pas venir après le premier argument. Les options (presque) précèdent toujours les arguments de la commande. Aussi, mv n'a pas -R option, et finalement, la récursivité est sans rapport avec un mv. @DimitrisTheodoridis s'il vous plaît tester votre réponse en premier. - zwets
oui mon frère vous avez raison, j'ai toujours des problèmes avec mon orthographe, et j'ai toujours des problèmes avec le terminal pour cela ou commande pas trouvé ou créer de nouveaux fichiers et répertoires que je ne sais pas, juste pour orthographe ... en passant commande cp utilisée, qu'ici écrit mv sory pour ce frère: D - Dimitris Theodoridis


Sûr rsync ne fonctionne pas, mais cela pourrait fonctionner aussi bien pour une machine qui ne supporte pas rsync (c.-à-d. dans cpanel, que rsync n'est pas installé par défaut).

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

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

Puis retirez le backup répertoire si nécessaire

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

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


3
2018-03-03 07:45





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. Quand on fait 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. Quand vous renommez foo à 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é.


1
2017-10-12 09:22