usando ls no bash

1

Eu tenho alguns arquivos como este:

a.10 a.15 a.20 a.30 a.40 a.50

se eu quiser fazer o mesmo trabalho para todos eles, posso usar

for data in 'ls a*| sort -n'

Se eu quiser fazer o mesmo trabalho, um por um. Eu posso usar:

data=('ls a* | awk '{print $1}'')
numb='ls a*|wc|awk '{print $1}''
ii=0
for da in ${data[$ii]} ; do
 echo  ${data[$ii]}
 ii=$(($ii+1))
 done

mas como posso fazer um mesmo trabalho para arquivos com ii igual e maior que 2, quero dizer como ls mas nem todos eles apenas para

    a.20 a.30 a.40 a.50
    
por user3891747 06.02.2016 / 10:59

2 respostas

1

Não há absolutamente nenhum motivo para analisar ls output quando a expansão é realmente feita pelo shell. Em vez deste código:

for data in 'ls a*| sort -n'

Você pode usar isto:

for data in a*

Mesmo que você precise classificá-lo, use isso (que falhará para nomes de arquivos com novas linhas):

for data in $( echo a* | sort -n )

E a melhor maneira de trabalhar com vários valores é transformá-los em uma matriz.
Em específico, a matriz de parâmetros:

set -- a*
printf '<%s>' "$@"; echo

E o seu código para fazer algum trabalho, um por um, se torna tão simples assim:

#!/bin/bash
set -- a*
numb=$#
printf '%s ' "$@"

Para processar com base no número do arquivo, você pode fazer:

#!/bin/bash
# using bash as the [[ is more robust.

set -- a*         # set an array of all files that start by a
for    file       # walk the array one by one
do
       [[ ${file#a\.} -le 20 ]] && continue # is the file number < 20
       printf '%s\n' "$file"                # do additional processing here
done
    
por 06.02.2016 / 20:14
0

O seguinte irá funcionar em todos os arquivos correspondentes ao padrão solicitado. Observe que também corresponderá arquivos como a.2y que existem e não apenas sufixos numéricos:

for file in a.2?; do
   #stuff with ${file}
done

Se você quiser endereçar somente arquivos numericamente com sufixos, isso funcionará:

for file in a.2{0..9}; do
    if [[ -f ${file} ]]; then # file exists
        # stuff with ${file}
    fi
done
    
por 06.02.2016 / 19:49

Tags