Isso deve resolver o problema declarado:
shopt -s globstar
printf '%qprintf '%q\n' **/*.pdf | head -1000 | xargs cp -t $destdir
' **/*.pdf | xargs -0 -L 1000 cp -t $destdir
A primeira linha ativa a opção globstar para o bash, para que **
ofereça uma pesquisa recursiva. Uma vez que printf
é um bash embutido no Ubuntu, ele não deve ter problemas com um grande número de arquivos.
O primeiro argumento dado a printf
informa como formatar todos os outros argumentos. %q
diz para escapar de tudo que possa causar problemas com \
- então foo bar'baz
se tornará foo\ bar\'baz
. O
diz para inserir um caractere nulo após cada string entre aspas (equivalente a usar -print0
xargs
em find), que pode ser separado por -0
da opção head
. Se você precisar usar nomes delimitados por novas linhas - o que, eu acho, você faz, já que você precisará de uma combinação de tail
e \n
para fazer lotes de arquivos - então você deve usar
em vez de %code% : find
find . -type f -exec your_script '{}' \+
Com tudo isso dito, talvez seja melhor você chamar seu script diretamente de %code% - então você não precisa se preocupar em escapar ou citar qualquer coisa:
shopt -s globstar
printf '%qprintf '%q\n' **/*.pdf | head -1000 | xargs cp -t $destdir
' **/*.pdf | xargs -0 -L 1000 cp -t $destdir