J'ai utilisé le terminal pour copier des fichiers d'un lecteur à un autre.
sudo mv -vi /location/to/drive1/ /location/to/drive2/
Cependant, cela s'est soudainement arrêté, pendant quelques heures, et sans erreur, après la création d'un répertoire.
Ma propre solution à cela est souvent un mélange de hachage et de comparaison, ce qui est surtout un gâchis qui prend du temps car je dois maintenant récupérer à partir d'une copie intermédiaire sans vraiment savoir quels fichiers sont manquants (écrits comme une très longue ligne pour zsh - notez que ce script ne fonctionne pas en bash comme écrit):
source_directory="/path/to/source_directory/";
target_directory="/path/to/target_directory/";
while read hash_and_file; do {
echo "${hash_and_file}" | read hash file;
echo "${file}" | sed "s/^/${source_directory}/g" | read copy_from;
echo "${copy_from}" | sed "s/${source_directory}/${target_directory}/g" | read copy_to;
mv -v "${copy_from}" "${copy_to}" | tee -a log;
rm -v "${copy_from}" | tee -a log; };
done <<<$(
comm -23 <( find ${source_directory} -type f -exec sha256sum "{}" \; |
sed "s: ${source_directory}: :g" | sort;
) <( find ${target_directory} -type f -exec sha256sum "{}" \; |
sed "s: ${target_directory}: :g" | sort; ) )
Ceci est sujet aux erreurs si le nom du répertoire cible ou du répertoire source fait partie du chemin d'accès et supprime les fichiers s'ils n'ont pas été déplacés car ils ont été marqués comme doublons. De plus, il ne source pas le répertoire à la fin.
Existe-t-il une meilleure pratique pour récupérer d'un mv interrompu?
--delete-during receiver deletes during the transfer
et aussi plusieurs autres alternatives utiles: --delete --delete-before --delete-delay --delete-after --delete-excluded
. Donc, oui, rsync est la meilleure alternative,
mv
commande ne fonctionne-t-il pas? Peut-être avec *
ajouté au chemin source si la source d'origine était un répertoire.
rsync --delete*
ne soit un désastre ! Il supprimera les éléments dest
qui ne sont pas actuellement dans src
, donc tous les fichiers qui ont été déplacés avec succès lors de la tentative précédente seront désormais supprimés! Vous pensiez probablement à rsync --remove-source-files
ce que je suis d'accord serait une bonne alternative. ( more1 , more2 )
rsync --delete
va seulement supprimer d' autres fichiers qui ne font pas partie de la source. De [man rsync] () * supprimez les fichiers superflus des répertoires dest *. Comprenez ce que signifie étranger : ne pas être synchronisé. Et oui, rsync fournit également un moyen de supprimer les fichiers source après qu'ils ont été correctement transmis.
cmp
au lieu de hacher. Il a des dépendances, et les mêmes problèmeswhile read
que ceux mentionnés par Gilles. Il est également lent et verbeux. Mais cela libère de l'espace disque plus tôt que la méthode rsync, car les fichiers sont (re) déplacés de la source pendant son exécution. Il peut servir d'inspiration aux courageux.