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 \)
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:
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
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?
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.
Tags command-line bash ls find