Como eu faço eco de apenas 1 coluna de saída do comando ls?

36

Digamos que quando eu comando ls a saída é:

file1 file2 file3 file4

É possível exibir apenas uma determinada coluna de saída, neste caso, arquivo2? Eu tentei o seguinte sem sucesso:

echo ls | $2

Basicamente tudo que eu quero fazer é ecoar apenas a segunda coluna, neste caso, quero fazer eco:

file2
    
por John 18.11.2013 / 06:34

4 respostas

60

O seguinte comando irá formatar a saída ls em uma coluna

ls -1 /directory
    
por 16.03.2015 / 16:36
30

Você está procurando por isso:

ls -C | awk '{ print $2 }'

No entanto, assumindo que você vai tentar usar este nome de arquivo mais tarde, não faça isso, pois ele irá quebrar em nomes de arquivos contendo espaços em branco. Em vez disso, coloque os arquivos em uma matriz e obtenha a segunda, o que evita a necessidade de fazer qualquer análise:

files=(*)
printf '%s\n' "${files[1]}"

A ordem em que você recupera os arquivos depende do valor de LC_COLLATE . Dessa forma, talvez você queira definir LC_COLLATE=C primeiro, se quiser uma classificação "padrão" em todos os casos de canto.

    
por 18.11.2013 / 06:40
7

Você precisaria adicionar -C como ls usa o modo de coluna única quando a saída não é um terminal. awk imprime a segunda coluna:

ls -C | awk '{print $2}'
    
por 18.11.2013 / 06:44
-3
num_chars=54 # offset
ls -ltr | cut -c$num_chars-

altere o número de caracteres (54), conforme necessário, para obter apenas os dados desejados.

    
por 20.05.2016 / 17:40