-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.