find ~ -maxdepth 20 -type f -size -16M -print > t; for ((i=$(wc -l < t); i>0; i--)) do a=$(sed -n ${i}p < t); mv "$a" /dev/shm/d; mv /dev/shm/d "$a"; echo $i; done; echo DONE; rm t
para flash drives (e discos rígidos externos), substitua o "~" em "find ~ -maxdepth" pelo local da unidade.
exemplo:
find /dev/sdb1 -maxdepth 20 -type f -size -16M -print > t; for ((i=$(wc -l < t); i>0; i--)) do a=$(sed -n ${i}p < t); mv "$a" /dev/shm/d; mv /dev/shm/d "$a"; echo $i; done; echo DONE; rm t
isso funciona na maioria dos casos. o script basicamente re-copia a maioria dos dados em 16 mb da unidade de volta para a unidade. funciona porque a maioria dos sistemas de arquivos (incluindo o fat 32) sempre tentam manter novos dados contíguos quando são salvos.
Isso é projetado para desfragmentar o diretório ~ /. Se você está realmente querendo fazer o trabalho, eu sugiro que você tente enfraquecer o disco usando um computador / programa do Windows.
Vinho talvez também?