Como colocar os arquivos específicos de um diretório em uma matriz no bash?

7

Suponha que eu tenha um diretório sob o qual existem 3 arquivos chamados: file1.txt, file2.txt e file3.txt.

Agora, como posso preencher uma matriz com esses nomes de arquivos (eu sei que todos os arquivos têm um determinado prefixo, ou seja, arquivo, depois do arquivo pode ser 1,2,3 etc.

    
por MiNdFrEaK 04.10.2012 / 06:40

2 respostas

8

Do Wiki de Greg: o guia do Bash entrada nos arrays :

files=()
while read -r -d $'
files=()
while read -r -d $'%pre%'; do
    files+=("$REPLY")
done < <(find *.txt -print0)
'; do files+=("$REPLY") done < <(find *.txt -print0)

Há uma explicação detalhada das matrizes na página que divide esse elemento de construção por elemento; vale a pena ler na íntegra.

    
por 04.10.2012 / 07:23
5

Se os arquivos estão todos no mesmo diretório, você tem algumas outras opções além da resposta do jasonwryan.

Usando um glob:

files=(file[0-9].txt)

Correspondendo apenas aos arquivos de exemplo da pergunta:

files=(file[1-3].txt)

Se você tiver o bash versão 4 ou superior, você pode até globalizar recursivamente:

shopt -s globstar
files=(**/file[0-9].txt)

Usando a expansão de chaves para restringir sua matriz a apenas seus arquivos de exemplo:

files=(file{1..3}.txt)

Ao contrário dos outros dois exemplos, isso irá preencher o array com os nomes dos arquivos, mesmo que eles não existam. Por esse motivo, a expansão de chave pode não ser desejável.

    
por 04.10.2012 / 08:06