para + array + args

1

Eu tenho problema com meu ciclo, é isso que eu quero:

for arg
do
array[index]=('find $arg -type l -maxdepth $depth -printf "%p\n" ')
 index++
done
fi

arg - argumentos posicionais, apenas diretórios

Este ciclo percorre os argumentos e encontra links simbólicos e eu quero que eles sejam armazenados em uma matriz. Se eu executar o script com apenas um diretório, tudo funciona bem, mas quando eu insiro dois ou mais diretórios, ele não funciona. Qualquer ajuda ?

Eu quero trabalhar assim, por exemplo:

Existem dois argumentos, cada um deles é o diretório.

Primeiro ciclo set arg para primeiro diretório e então array é preenchido com links simbólicos por exemplo ele encontrará 2 links simbólicos então array [0] array [1] será aquele links e então ele deve continuar com second arg e existem por exemplo, 3 links simbólicos e deve configurá-los para array [2] array [3] array [4]

    
por xpukm 15.11.2013 / 12:28

1 resposta

2

Se estivermos falando de ksh93 ou bash (e GNU find ), não há matrizes multidimensionais (ou matrizes de matrizes), você poderia:

index=0 IFS=$'\n'
set -f
for arg do
  eval "array_$index"'=($(find "$arg" -type l -maxdepth "$depth" -print))'
  ((index++))
done

Para ter matrizes diferentes chamadas array_0 , array_1 ...

(o acima assume que nomes de arquivos não contêm caracteres de nova linha).

Se você quiser que todos os links sejam mesclados em uma única matriz, então:

IFS=$'\n'
set -f
array=($(find "$@" -type l -maxdepth "$depth" -print))

deve ser o suficiente.

Usar matrizes ou loops em shells geralmente é um sinal de que você não está enfrentando o problema da maneira certa.

Por exemplo, se você quiser encontrar o link simbólico mais profundo (como seu comentário sugere), faça algo como:

find "$@" -type l -print | awk -F/ '
   NF > n {deepest = $0; n=NF}
   END {print "Deepest:", deepest}'

awk será muito mais eficiente que o shell para processar texto e trabalhar com matrizes. Ele é projetado para isso. Shells não são (e bash de todas as shells é uma das mais ineficientes). Shells são bons em executar comandos (como awk ou find ), para isso são projetados.

    
por 15.11.2013 / 13:32