Je dois déplacer certains fichiers d'un système de fichiers à un autre sous Ubuntu. Cependant, il est très important que les fichiers n'existent jamais en tant que fichiers partiels ou incomplets à la destination, du moins pas sous le nom de fichier correct.
Jusqu'à présent, ma seule solution consiste à écrire un script qui prend chaque fichier, le copie dans un nom temporaire à la destination, puis le renomme (qui, je pense, devrait être atomique) à la destination avec le nom de fichier d'origine et supprime enfin le fichier d'origine .
Cependant, l'écriture et le débogage d'un script semblent exagérés pour cette tâche. Existe-t-il un moyen ou un outil qui le fait déjà nativement?
Réponses:
rsync
des copies dans des noms de fichiers temporaires (par exemple, voir l' extension de fichier temporaire Rsync et rsync - crée-t-il un fichier temporaire pendant le transfert? ) sauf si vous utilisez l'--inplace
option. Il les renomme uniquement après que le fichier a été transféré avec succès.rsync
supprime également tous les fichiers de destination qui n'ont été que partiellement transférés (par exemple en raison d'un disque plein ou d'une autre erreur).Il existe également une
--remove-source-files
option qui supprime les fichiers source après leur transfert réussi. Voir larsync
page de manuel pour plus de détails.En mettant tout cela ensemble, vous pouvez utiliser quelque chose comme:
Cette option est particulièrement utile pour des tâches telles que le déplacement de fichiers hors d'une file d'attente "entrante" ou similaire au répertoire dans lequel ils seront traités.
Alternativement, s'il s'agit d'un miroir unique, peut-être simplement l'utiliser
rsync
sans l'--remove-source-files
option. Vous pouvez supprimer les fichiers source ultérieurement si vous le souhaitez / devez le faire.la source
rsync
pourrait faire, et je savais que cela transférait des fichiers avec un nom temporaire (sauf si vous utilisez--inplace
), alors j'ai regardé dansman rsync
et trouvé--remove-source-files
.rsync
est un bon outil pour vérifier d'abord presque toutes les tâches de transfert de fichiers.