Je souhaite 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 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à?
Remarque: je veux juste fusionner le contenu, il n'y a pas de réécriture.
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 souhaitez vouloir fusionner le contenu de la source dans la cible, ce que mv
ne fera pas.
Utilisez rsync -a backup/ backupArchives/
à la place. Après cela rm -rf backup/*
.
Au lieu d’utiliser rsync
, vous pouvez également effectuer les tâches classiques.
(cd backup && tar c .) | (cd backupArchives && tar xf -)
ce qui vous rapporte plus de points geek.
Rapide et sale, si vous savez ce que vous faites:
cp -r ./backup/* ./backupArchives && rm -R ./backup/*
Une fois 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 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:
tar -cvzpf backup.tar.gz /var/www
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
tar -xvzpf /var/www/
Si vous avez besoin de copier vers un emplacement que vous ne possédez pas, assurez-vous d’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/
Bien sûr, rsync
fonctionne, mais cela pourrait également fonctionner pour les ordinateurs ne prenant pas en charge rsync
(c'est-à-dire dans cpanel, où rsync n'est pas installé par défaut).
Qu'en est-il d'utiliser:
cd /path/to/backup/ && cp -R --parents ./* ../backupArchives
Supprimez ensuite le répertoire backup
si nécessaire.
Remarque 1: vous devez cd
dans le répertoire backup
avant d'exécuter le cp -R --parents ...
.
Remarque 2: revérifiez le répertoire backupArchives
si vous avez récupéré les nouveaux fichiers.
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épertoires, 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 à basculer vers un gestionnaire de fichiers à interface graphique, par exemple, Dolphin. 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 é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é.