Eu usei o terminal para copiar arquivos de uma unidade para outra.
sudo mv -vi /location/to/drive1/ /location/to/drive2/
No entanto, isso parou de repente, algumas horas depois, e sem erro, depois de criar um diretório.
Minha própria solução para isso geralmente é uma mistura de hash e comparação, o que é principalmente uma bagunça demorada, pois agora tenho que me recuperar de uma cópia intermediária sem realmente saber quais arquivos estão faltando (escrito como uma linha muito longa para zsh - observe que este script não funciona no bash conforme escrito):
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; ) )
Isso é propenso a erros se o nome diretório de destino ou diretório_origem fizerem parte do caminho e excluir arquivos se eles não tiverem sido movidos porque foram marcados como duplicados. Além disso, ele não fornece o diretório de origem no final.
Existe uma prática recomendada de como recuperar de mv interrompido?