Lista recursivamente completa do caminho absoluto de arquivos com permissões no Linux

6

Eu fiz um pouco de pesquisa on-line e estou tentando encontrar uma maneira de listar recursivamente todos os arquivos com seu caminho absoluto e com suas permissões. Eu quero fazer isso para que eu possa grep fora o que eu quero, para que quando eu executar o comando, eu possa obter apenas os arquivos correspondentes, suas permissões e seus caminhos completos, como:

<search command> | grep file.name

Saída:

/home/current/Desktop/file.name
/etc/program/src/file.name

Eu preferiria usar ls porque é o mais rápido e eu digitaria:

ls -alR $PWD/

Mas isso não mostra o caminho do arquivo, então, se eu grep 'editou a saída, então eu veria as permissões de arquivo, mas não o diretório do qual ele se originou.

Eu posso usar ls integrado com find e grep para obter a saída exatamente no formato que eu quero, e eu poderia usar algo assim:

ls -ault 'find $PWD/ -type f' | grep file.name

Mas isso é extremamente lento, estou achando que dois comandos estão sendo executados.

Se eu usar apenas find sem ls ou grep , ele será mais rápido, mas é um monte para digitar:

find $PWD/ -type f -name file.name -printf '%M %u %g %s\t%a\t%p\r\n'

Isso me dará um ótimo formato (inclui também o usuário, o grupo, o tamanho e a última data de acesso, que são úteis). No entanto, é um tonelada para digitar, e certamente não é tão rápido quanto usar ls com grep .

Existe uma maneira mais rápida de fazer o que estou tentando fazer do que usar find ?

    
por Michael Plautz 14.05.2013 / 17:14

4 respostas

7

Em vez de ls ou find , você pode tentar tree . Especificamente, tree -ifpugDs $PWD deve fornecer o que você gostaria.

-if remove as linhas de recuo e imprime o caminho

-p imprime permissões

-ug imprime usuário e grupo

-D imprime o tempo de modificação

-s imprime o tamanho

    
por 14.05.2013 / 17:28
3

Se a digitação é um problema, que tal colocar o que você já tem em uma função:

myspecialfinder() {
  find $PWD/ -type f -name "$1" -printf '%M %u %g %s\t%a\t%p\r\n'
}

Você usaria como

myspecialfinder file.name
    
por 14.05.2013 / 17:28
1

Resposta simples: find -type f -print0 | xargs -0 ls -al

    
por 16.08.2015 / 07:00
0
--tree -ifpugDs $PWD-- etc.

Muito perto. O problema é $PWD , que resulta em inútil lixo se você tiver nomes de arquivos reais, não arquivos no estilo Unix nomes, isto é, sem espaços. Para fazê-lo funcionar em qualquer sistema de arquivos, EG NTFS, você precisa citar o $ PWD.

Eu uso o C-shell, como eu era um usuário de berkeley / Sun no Laboratório, mas as mesmas ideias se aplicam no bash.

tree -if "$PWD"

Agora, se o nome do seu arquivo for

/home/he/Documents/00 - Writing/02 The Rapture of the Maiden/0 - Text/25th/Rapture, pt 1-4, ch 01-20 old.txt, 

não sai logo que atinge o espaço.

Sou um grande fã de nomes de arquivos em inglês, isto é, não é algo como RSFunc97Stat.txt. Talvez porque, ao contrário da maioria dos programadores, eu possa digitar com dez números em uma velocidade normal de escrita - poucas pessoas precisam de mais de 40 palavras por minuto para digitar o mais rápido que puderem compor. A maioria dos técnicos com quem trabalhei usa o método 3-dedos-em-uma-mão-2-on-the-other, e eles gostam de usar o nome curto da variável, não gostam de comentar e, em geral, não podem ser contados para ajudar com o documento do usuário. Além disso, é um hábito antigo dos dias em que você só tem 8 caracteres para dizer isso.

Hoje em dia, precisamos dar suporte a todos os nomes de arquivos, até mesmo o "Army.txt de O'Reilly". Eu ainda tenho um item de teste de banco de dados em todos os bancos de dados que fiz, chamado de teste "O'Reilly". Muitos programas falharam completamente quando um campo de texto tinha uma marca de aspas ou um ritmo principal, etc. A boa notícia é que o tcsh faz o autocompletar automaticamente seus arquivos e os cita de acordo com a sintaxe de arcada correta.

    
por 16.08.2015 / 06:55

Tags