Na minha experiência, fdupes
pode ser inconsistente na ordem em que ele gera os arquivos (tive meus próprios problemas usando a opção --delete
). Isso deve ser razoavelmente robusto, pois não requer que os arquivos estejam em uma ordem específica (desde que haja sempre dois dupes em pastas diferentes):
# note no trailing slash
source_dir=/home/articles
target_dir=/external/articles
fdupes "$target_dir" "$source_dir" |
while IFS= read file; do
case "$file" in
"$source_dir/"*)
source=${file##*/}
;;
"$target_dir/"*)
target=$file
;;
'')
if [ "$source" ] && [ "$target" ]; then
echo mv -i "$target" "$target_dir/$source"
fi
unset source target
;;
esac
done
Isso apenas imprimirá os comandos mv
, removerá o echo
quando tiver certeza de que você tem o que deseja. Além disso, a opção -i
para mv
solicitará a você se vai sobrescrever qualquer coisa.