Liste todos os arquivos / diretórios no diretório atual ou abaixo dele que correspondem a 'filename'.
17
O equivalente direto é
find . -iname <filename>
que listará todos os arquivos e diretórios chamados <filename>
no diretório atual e todos os subdiretórios, ignorando o caso.
Se a sua versão do find não suportar -iname
, você poderá usá-lo -name
. Observe que -iname
, diferentemente , diferencia -name
maiúsculas de minúsculas.
Se você deseja apenas listar arquivos chamados <filename>
, e não diretórios, adicione-type f
find . -iname <filename> -type f
Se você quiser usar caracteres curinga, precisará colocar aspas, por exemplo,
find . -iname "*.txt" -type f
caso contrário, o shell o expandirá.
Como outros já apontaram, você também pode:
find . | grep "\.txt$"
grep
imprimirá linhas com base em expressões regulares, mais poderosas que curingas, mas com uma sintaxe diferente.
Veja man find
e man grep
para mais detalhes.
<filename>
contiver caracteres curinga, use aspas, por exemplofind . -name '*.txt'
.<filename>
como marcador para a entrada do usuário é um mau hábito no ambiente de linha de comando, onde na< and >
maioria das vezes tem um significado específico. Sugiro que você usefilename
, talvez FILENAME, para enfatizá-lo. A maioria das pessoas entenderá, e aquelas que não entenderão poderão causar danos se não entenderem que não devem atingir um sinal menor ou maior.<filename>
é uma convenção em grande parte da documentação do UNIX, por isso acho útil que as pessoas estejam cientes disso, mas concordo queFILENAME
pode ser mais fácil de entender.find -iname <filename>
é melhor uma vez que é case-insensitive como DOSAlgumas conchas permitem
ls **/filename
, o que é bastante conveniente.fonte
shopt -s globstar; echo **/filename
é equivalente afind . -name "filename"
. Também funciona no zsh.shopt -s globstar
, provavelmente funcionará para você. O globbing recursivo é um recurso que está disponível apenas em alguns shells e, às vezes, não está ativado por padrão.shopt
comando ativa a opçãoglobstar on
. agora isso trabalha como charme. Muito obrigado.Você pode fazer isso com
fonte
find . -regextype posix-egrep -regex '.*filename.*'
(não sei se aegrep
parte é importante, mas você usouegrep
sua resposta, então eu a incluí)grep
usa expressões regulares, enquanto o comando do DOS usa caracteres curinga do shell.find . -name "*.*"
não fará o que você esperaria de um plano de fundo do DOS. Os globos estão próximos o suficiente para serem reconhecidos, enquanto as expressões regulares são um animal totalmente novo.*.*.*
faz em um DOS moderno, como o Windows cmd? Que tal*.*.*.*
?Também pode ser:
tree -if </your/path>
ou'pwd'
como um caminhofonte