Como alinhar a lista ls -l de arquivos e diretórios em uma coluna, em vez de imprimir horizontalmente?

0

Estou tentando imprimir os nomes de cada arquivo e diretório para o usuário atual, mas ele continua imprimindo em uma grande linha longa. Eu quero ter cada arquivo presente como uma coluna, assim como quando eu imprimo ls -l.

Você não precisa ajudar com isso, mas, para um melhor contexto, estou tentando garantir que dois pontos ':' apareçam após cada nome de arquivo, junto com as permissões de grupo do primeiro campo. Por exemplo, poderia parecer "arquivo / dir: ---" ou "arquivo / dir: r -"

echo $(ls -l /home/$(whoami) | awk '{if (NR>1) print $9}'): $(ls -l /home/$(whoami) | awk '{if (NR>1) print $1}')
    
por alphabet122 14.02.2018 / 16:11

3 respostas

3
ls -1

listará um arquivo por linha. Esse é o padrão quando a saída de ls é redirecionada para qualquer lugar que não seja um terminal.

Para obter o resultado que você espera, seria melhor fazer algo como

ls -l | awk 'NR > 1 { print $9 ":" $1 }'

ou melhor ainda,

stat -c "%n:%A" *

embora ambos listem todas as permissões, não apenas as permissões do grupo. Para ver apenas permissões de grupo, use

ls -l | awk 'NR > 1 { print $9 ":" substr($1,5,3) }'

ou

stat -c "%n:%A" * | sed 's/....\(...\)...$//'

(hat-tip para user1404316 para a expressão sed ).

As variantes ls -parsing não lidam com espaços e outros caracteres em branco nos nomes dos arquivos, portanto eles não devem t ser usado em geral .

    
por 14.02.2018 / 16:14
2

Existe uma solução muito mais simples se você tiver acesso a uma versão de find que inclua as extensões GNU. Para descobrir, execute man find e procure o -printf (para isso, primeiro pressione /^ *-printf ). Se você fizer isso, você está com sorte, porque sua solução poderia ser:

find . -maxdepth 1 -type f -printf "%f: %M\n" | sed 's/....\(...\)...$//'

Como bônus, essa resposta funcionará no caso incomum de um nome de arquivo incluindo o caractere de dois pontos.

    
por 14.02.2018 / 17:27
0

Se você quisesse os arquivos apenas para o usuário atual.

ls -l | awk -v var="$(whoami)" '$4 == var {print $9}'

Isso só imprimirá arquivos que pertençam ao usuário atual, no formato desejado.

    
por 14.02.2018 / 16:30

Tags