Respostas:
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>
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ê use filename
, 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 que FILENAME
pode ser mais fácil de entender.
find -iname <filename>
é melhor uma vez que é case-insensitive como DOS
Algumas conchas permitem ls **/filename
, o que é bastante conveniente.
shopt -s globstar; echo **/filename
é equivalente a find . -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ção globstar on
. agora isso trabalha como charme. Muito obrigado.
Você pode fazer isso com
find . | egrep filename
find . -regextype posix-egrep -regex '.*filename.*'
(não sei se a egrep
parte é importante, mas você usou egrep
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 caminho
<filename>
contiver caracteres curinga, use aspas, por exemplofind . -name '*.txt'
.