Lista arquivos recursivamente no OSX?

1

Eu quero encontrar todos os arquivos PDF em um diretório e seus subdiretórios, no OSX.

Eu sei que existem alguns PDFs em subdiretórios porque, por exemplo, isso produz muitos resultados:

ls myfolder/pdfs/*.pdf

Todo o meu Googling sugere que eu quero ls -R , mas isso não produz resultados:

ls -R *.pdf

O que estou fazendo de errado?

Eu posso encontrar alguns resultados desta maneira:

ls -R | grep pdf

Mas não consigo ver esses caminhos completos para os arquivos, o que não ajuda muito.

    
por Richard 24.03.2018 / 12:29

3 respostas

0

ls -R *.pdf invocaria ls recursivamente em qualquer coisa que correspondesse a *.pdf (se não houver nada correspondente a *.pdf no diretório atual, você não obterá resultados e, se houver, apenas recorrerá a ele se é um diretório). ls -R | grep pdf mostraria tudo no resultado ls -R que corresponde à expressão regular pdf , que não é o que você deseja.

Isso é o que você precisa:

find myfolder -type f -name '*.pdf'

Isso lhe dará os nomes de caminho de todos os arquivos regulares ( -type f ) dentro ou abaixo do diretório myfolder cujos nomes de arquivos correspondem ao padrão *.pdf . O padrão precisa ser citado para protegê-lo do shell.

    
por 24.03.2018 / 12:34
2

No shell bash nativo que você tem no macOS Terminal, ative uma opção de glob globada globstar para ativar a correspondência de globos recursivos em subdiretórios aninhados.

shopt -s globstar nullglob
ls **/*.pdf

O nullglob impede que padrões de nome de arquivo que correspondam a nenhum arquivo sejam expandidos para uma string nula, em vez de eles mesmos. Com globstar , o padrão ** usado em um contexto de expansão de nome de arquivo corresponderá a todos os arquivos e zero ou mais diretórios e subdiretórios.

Para ser um pouco seguro, evitando definir as opções de shell no shell atual, você pode configurá-lo no sub-shell

( shopt -s globstar nullglob; ls **/*.pdf )
    
por 24.03.2018 / 12:42
0

tente

find . -name \*.pdf -print

isso deve listar pdf como

myfolder/foo/doc1.pdf
myfolder/bar/foo/doc2.pdf

observe que * in *.pdf deve ter escape se houver um arquivo pdf no diretório inicial.

    
por 24.03.2018 / 12:33

Tags