Ginástica do atributo de arquivo Bash: Como faço para obter um arquivo facilmente com caminhos e privilégios completos?

StackOverflow https://stackoverflow.com/questions/2254370

  •  20-09-2019
  •  | 
  •  

Pergunta

Queridos mestres da linha de comando,

Eu tenho uma árvore de diretório para a qual quero gerar um arquivo que contém em duas entradas por linha: caminho completo para cada arquivo e os privilégios correspondentes desse arquivo.

Por exemplo, uma linha pode conter:

/v1.6.0.24/lib/mylib.jar -r-xr-xr-x

A melhor maneira de gerar a coluna da mão esquerda parece ser achar. No entanto, porque ls Não parece ter uma capacidade de ler uma lista de nomes de arquivos ou tomar stdin, parece que tenho que recorrer a um script que faça isso por mim. ... pesado.

Eu tinha certeza de que vi pessoas de alguma forma encontrarem um comando contra cada arquivo encontrado, mas devo ser idiota esta manhã, pois não consigo descobrir!

Alguém?

Em termos de leitura, dizia o arquivo, pode haver espaços em nomes de arquivos, então Com certeza seria bom se houvesse uma maneira de obter algumas das ferramentas de linha de comando existentes para contar os campos da direita para a esquerda. Por exemplo, nós temos cortar. No entanto, cortar é à esquerda primeiro e não aceita um número negativo para significar iniciar a numeração à direita (como parece a sintaxe mais óbvia para mim). ... Sem ter que escrever um programa para fazer isso, existem maneiras fáceis?

Agradecemos antecipadamente e agradecemos especialmente por explicar todos os exemplos que você possa fornecer!

Obrigado, Rt

Foi útil?

Solução

GNU findutils 4.2.5+:

find -printf "$PWD"'/%p %M\n'

Outras dicas

stat -c %A file

Imprimirá as permissões de arquivo para arquivo.

Algo como:

find . -exec echo -ne '{}\t\t' ';' -exec stat -c %A {} ';'

Dará a você uma versão mal formatada do que você segue.

Fica muito mais complicado porque você quer tudo alinhado nas mesas. Você pode querer examinar o comando 'coluna'. TBH, eu apenas relaxaria um pouco meus requisitos de saída. A formatação de saída em SH é uma dor na bunda.

Também pode ser feito com LS e AWK:

ls -l -d $PWD/* | awk '{print $9 " " $1}' > my_files.txt

Bash 4

shopt -s globstar
for file in /path/**
do
    stat -c "%n %A" "$file"
done
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top