ls'ing através de uma árvore de diretórios inteira para produzir uma lista de arquivos

4

Isso já pode ter sido respondido. Mas eu não consegui encontrá-lo.

Eu tenho:

directory
directory/subdirectory/subdirectoryofsubdirectory
directory/sub-subdirectory/subdirectoryofsub-subdirectory/subdirectoryofsubdirectoryofsub-subdirectory
directory/sub-sub-subdirectory
directory/sub-sub-sub-subdirectory

cada diretório e subdiretório contém arquivos. Eu quero listar todos eles, canalizar a lista para cat e cat a lista para um arquivo de texto. Isso pode ser feito com um 'one liner'? Em caso afirmativo, forneça-o. Ou requer um script e, em caso afirmativo, quais comandos / estruturas eu precisarei escrever o script?

    
por ixtmixilix 20.09.2010 / 22:15

2 respostas

10

Acho que sua melhor aposta é o comando find . Se você quer apenas os arquivos e não os diretórios da sua lista, algo assim:

find directory/ -type f -print > textfile

O comando find listará recursivamente os arquivos. (Se você quiser os diretórios listados também, remova o -type f ). O > textfile redireciona o stdout para um arquivo denominado textfile sem necessidade de cat.

find é uma ferramenta poderosa com muitas opções. Veja man find se você achar que precisa ajustar a saída um pouco.

UPDATE (obrigado gvkv ):

Se você quiser colocar os conteúdos dos arquivos em um único arquivo de texto, então uma maneira de fazer isso é:

find Documents/ -type f -exec cat {} + > textfile
    
por 20.09.2010 / 22:32
3

find é o caminho genérico, como A resposta de Steven D explica. Se o seu shell suportar, ** pode ser usado para corresponder a qualquer número de subdiretórios (no bash é igual a * e corresponde apenas a um por padrão, mas veja o comentário de Dennis), então você pode fazer:

cat **/*
    
por 20.09.2010 / 23:08

Tags