Com [1] versões recentes do GNU findutils e coreutils :
find /home/jeremy/source -print0 |
tail -z -n 1000 |
xargs -0 -r mv -t /home/jeremy/dest/
As opções -print0 , -z e -0 informam as três ferramentas para usar um caractere NUL como separador de nome de arquivo / registro. Isso torna seguro usar este pipeline com nomes de arquivos contendo QUALQUER caractere.
Se a sua versão de tail (ou head ) não suportar a opção -z , você poderá usar nova linha como delimitador de nome de arquivo (que será seguro para QUALQUER nome de arquivo, exceto os que contenham novas linhas):
find /home/jeremy/source |
tail -n 1000 |
xargs -r -d '\n' mv -t /home/jeremy/dest/
BTW, xargs não é complicado. É um comando bastante simples que pega dados de stdin e os usa para rodar programas (com os dados de stdin usados como argumentos na linha de comando do programa). É uma ferramenta útil que vale bem a pequena quantidade de tempo necessária para aprender.
Mais importante, ao contrário de $(ls ...) e similar, usar xargs evita a maioria dos problemas com espaços, caracteres de globalização (curingas, etc) e outros caracteres irritantes (que são caracteres perfeitamente legítimos). em nomes de arquivos, então um roteiro bem escrito cuidará para não ser quebrado por eles).
[1] Eu não sei exatamente quando head e tail obtiveram -z opções, mas nos últimos anos, muitas das ferramentas GNU (incluindo sort ) ganharam a capacidade de usar NUL como o separador de registro de entrada. Antes disso, eram apenas algumas ferramentas como find e xargs .
Isso é extremamente útil, pois agora você pode usar as opções -z ou -Z ou -0 etc para construir pipelines longos e complicados sem nunca perder essa útil separação NUL.