-print0 não deve ser usado em uma substituição $(...) , porque as sequências nas variáveis bash são terminadas por caractere nulo.
Eu fiz uma pergunta cuja resposta foi semelhante à que essa pergunta exige: link
Adapte essa resposta à sua pergunta:
to_dump=()
while IFS= read -r -d ''; do
to_dump+=( "$REPLY" )
done < <(find . -maxdepth 1 -print0)
Isso cria uma matriz chamada to_dump e usa o comando read para ler elementos delimitados por NULL de find . O motivo que < <(...) está sendo usado aqui, em vez de um pipe, é evitar uma sub-camada implícita que impediria que o array fosse modificado.
Vale a pena notar que o seu comando find original provavelmente quer um -mindepth 1 , ou ele irá escolher . (o diretório atual) e você acabará fazendo uma cópia recursiva sobre isso.
Eu notei que você usa -maxdepth 1 como um argumento para encontrar, então talvez isso seja mais útil:
shopt -s nullglob
to_dump=( * .[!.]* ..?* )
Evitando find , isso usa somente anúncios internos, não é bifurcado e, na maior parte, é bastante limpo.
A primeira linha, shopt -s nullglob , é um comando bash (-only) que ativa a opção nullglob . Esta opção é descrita em man 1 bash :
If set, bash allows patterns which match no files (see Pathname Expansion above) to expand to a null string, rather than themselves.
Em termos mais simples, se você digitar * , mas não corresponder aos arquivos, ele removerá o * . O comportamento padrão é colocar o * lá de qualquer maneira.
A segunda linha adiciona 3 globs ao array:
-
*: todos os arquivos que não começam com. -
.[!.]*: todos os arquivos que começam com um.e um caractere não.. Isso evita corresponder os diretórios.e... -
..?*: Todos os arquivos que começam com..e pelo menos mais um caractere. Adicionado pela mesma razão que o glob anterior, cobrindo os casos perdidos.
O Bash expande os globs para a definição do array, e os expande corretamente - sem divisão no espaço em branco ou qualquer coisa assim.
Uma advertência sobre o uso do nullglob: Se você tiver ativado o nullglob, curl google.com/search?q=test resultará em queixar-se em você por não passar argumentos e ls /var/fasdfasafs* fornecerá uma listagem do diretório atual. Esta é uma das razões pelas quais não está ativada por padrão.