Como armazenar todos os arquivos com o mesmo sufixo em uma tabela?

3

Estou fazendo um pequeno script de shell e quero estocar todos os arquivos com o mesmo sufixo em uma tabela.

eu quero algo assim:

path=/home/user/Documents
suffix="_suffix.txt"

e, em seguida, uma função que cria um arquivo de nome de tabela e o preenche com o arquivo em $ path com o sufixo $ suffix. resultado:

echo files[0]

- > /home/user/Documents/project_suffix.txt

echo files[1]

- > /home/user/Documents/html_suffix.txt

echo files[2]

- > /home/user/Documents/jokes_suffix.txt. etc ...

Eu não quero ter na minha lista outros arquivos como "budget.txt"

Obrigado pelas suas respostas! ;)

    
por Jone Bambo 26.02.2015 / 18:37

2 respostas

4

Isso é bastante simples com versões recentes de bash usando globbing e arrays , que é o que suponho que você entende por tabelas.

Primeiro, crie alguns arquivos de teste:

path=/some/where
touch $path/{a,b,c}_suffix.txt

Este é um exemplo que coloca todos os arquivos terminados em _suffix.txt na matriz files :

files=("$path"/*_suffix.txt)

Para fazer uma iteração sobre eles, você pode fazer algo assim:

for file in "${files[@]}"; do
  echo "$file"
done

Ou:

for i in ${!files[@]}; do
  echo "${files[i]}"
done

Note que nomes de arquivos com espaços e novas linhas neles causarão problemas com essa abordagem. Nesse caso você é melhor com um find e -print0 loop, veja esta resposta para um exemplo e < href="http://mywiki.wooledge.org/BashFAQ/001"> este artigo para detalhes.

Editar

Como observado por muru , o problema de espaço em branco pode não ser tão problemático quanto costumava ser, YMMV.

    
por Thor 26.02.2015 / 18:54
2

O que você chama de tabela geralmente é chamado matriz ou mapa. No bash, para criar uma matriz :

path="/home/user/Documents"
suffix="_suffix.txt"
files=( "$path"/*"$suffix" )

O * é um curinga , que é expandido pelo shell para todos os nomes de arquivos correspondentes (que têm $path antes e $suffix depois). Os colchetes ( () ) convertem os nomes de arquivos expandidos em uma matriz.

Em seguida, você pode acessar cada elemento (indexado de 0, em vez de 1) usando "${files[0]}" , "${files[1]}" , etc.

Por exemplo:

$ path=/tmp
$ suffix=_amd64.deb
$ files=( "$path"/*"$suffix" )
$ echo "${files[1]}" "${files[0]}" 
/tmp/vim-athena_7.4.640-1~ppa1~t_amd64.deb /tmp/vim_7.4.640-1~ppa1~t_amd64.deb
    
por muru 26.02.2015 / 18:53