Utilizando find para listar todos os arquivos sob determinado diretório

4

Estou tentando usar um comando de linha única que localizará cada diretório (ou subdiretório) chamado bin e, em seguida, imprimirá uma lista de todos os arquivos sob ele, mas também não listará os nomes de diretório sob eles.

Eu tentei algumas coisas diferentes para conseguir isso, mas até agora nenhuma funcionou:

  1. find ~ -type d -name "bin" -exec ls '{}' ';' | grep -v /

Eu testei isso e ele listará os arquivos, mas também listará os diretórios sob qualquer bin. Portanto, se eu tiver um subdiretório bin em um diretório bin semelhante a este:

~/home/
   ~/home/bin
      file1.txt
      ~/home/bin/bin
         file2.txt

A saída é algo como isto:

bin
file1.txt
file2.txt
  1. find ~ -type d -name "bin" -exec ls -f '{}' ';'

Eu li que fazer ls -f listará apenas arquivos, mas isso infelizmente também lista os diretórios bin , .. e .

Então, como posso fazer isso?

    
por Alex 17.02.2015 / 02:09

2 respostas

8

Com -path , você pode tentar:

find ~ -path '*/bin/*' -type f

Isso não listará bin , portanto, para obter os dois:

find ~ \( -path '*/bin/*' -type f \) -o \( -name bin -type d \)
    
por 17.02.2015 / 02:18
2

Você pode fazer isso com as chamadas find aninhadas:

$ find ~ -type d -name bin -exec find '{}' -type f ';'

Como estou substituindo uma chamada ls , talvez você não queira mais de um nível de listagem na segunda chamada find . Nesse caso, adicione -maxdepth 1 após -type f acima.

    
por 17.02.2015 / 02:44