Extrai arquivos csv do caminho para vários arquivos no bash

3

Eu tenho um caminho de arquivos múltiplos arquivos para fins de backup, agora eu quero filtrá-lo com base em ".csv" fromat. Eu tentei isso.

filesall=(/home/abc/allfiles/*)
files=$((${filesall[@]}|grep -F ".csv"))
files=$(${filesall[@]}|grep -oe "*.csv")

mas não é possível extrair arquivos .csv de $ filesall . Eu sei que posso conseguir isso assim

files=(/home/abc/allfiles/*.csv)

alguma sugestão, como posso obter todos os arquivos .csv de filesall.Thanks.

    
por Aashu 12.09.2014 / 10:17

2 respostas

1

Esta não é a melhor maneira de fazer isso. Por que analisar o array? Uma abordagem mais simples seria algo como:

path=/home/abc/allfiles
filesall=(${path}/*)
files=(${path}/*.csv)

Se você insistir em fazer do seu jeito, você teria que fazer algo como:

files=($(for file in "${filesall[@]}"; do [[ $file =~ \.csv$ ]] && echo $file; done))

ou

files=($(printf "%s\n" "${filesall[@]}" | grep '\.csv$'))

Mas ambas as quebras acima, se algum dos seus nomes de arquivo contiver espaços em branco. (Eles podem ser feitos para trabalhar com espaços se você os preceder com saveIFS="$IFS"; IFS=$'\n' e segui-los com IFS="$saveIFS" , mas eles ainda quebram na nova linha.)

    
por 12.09.2014 / 15:00
0

Com base na resposta de terdon, aqui está uma que parece funcionar:

filesall=(all files)
files=(); for file in "${filesall[@]}"; do [[ $file =~ \.csv$ ]] && files+=("$file"); done
    
por 19.09.2014 / 01:24