Como posso pesquisar um arquivo pelo nome e caminho parcial?

50

Geralmente, tenho um nome de arquivo e seu caminho parcial, por exemplo, "content / docs / file.xml".

Existe uma maneira simples de procurar por esse arquivo, sem cortar manualmente em partes seu nome para fornecer o nome do diretório e o nome do arquivo separadamente?

Seria ótimo se find trabalhasse dessa forma, então eu poderia executar find content/docs/file.xml , mas infelizmente isso não acontece.

    
por slhck 13.03.2012 / 09:42

4 respostas

58

Passe um caractere curinga * para indicar uma correspondência para qualquer coisa . Você também precisa escapar do * s, por exemplo:

find . -path \*content/docs/file.xml

ou coloque o padrão entre aspas, por exemplo:

find . -path "*content/docs/file.xml"

Como a página do manual descreve:

$ find . -name *.c -print

find: paths must precede expression

This happens because *.c has been expanded by the shell resulting in find actually receiving a command line like this:

find . -name bigram.c code.c frcode.c locate.c -print

That command is of course not going to work. Instead of doing things this way, you should enclose the pattern in quotes or escape the wild‐ card:

$ find . -name \*.c -print

    
por 13.03.2012 / 10:11
7

find também tem uma opção -wholename find $top_dir -wholename *string*

find /usr -wholename *in/abiw*

>/usr/bin/abiword
    
por 13.03.2012 / 09:56
3
find . -type f | grep "content/docs/file.xml"

ou apenas

locate content/docs/file.xml
    
por 13.03.2012 / 09:45
1

Por exemplo, pesquisando arquivos em um local usando asterisco / curinga ( * ) como: %código% você poderia usar encontrar dir=“/apps/*/instance01/" . colocando todos os arquivos em um array assim:

arr=('find ${dir} -name “*.jks"')

se você deseja obter arquivos com outras extensões, use "ou" assim:

${dir} -name “*.jks” porque -name "*.keystore" -o -name "*.jks" -o -name “*.p12" só aceita uma string única, então use ‘ou’.

Por fim, coloque tudo em ordem assim:

arr=('find ${dir} -name "*.keystore" -o -name "*.jks" -o -name "*.p12"')

se você tiver caminhos completos, não os caminhos parciais, é muito mais fácil colocá-los em matrizes como este:

arr=(“/Users/ajay/Documents/keystore_and_p12files/"*.{keystore,p12,jks})
    
por 22.05.2015 / 02:38