localiza problema de correspondência de comando [duplicado]

1

Estou tendo alguns problemas ao pesquisar arquivos com o comando find e a maneira como ele lida com a pesquisa.

Digamos que eu esteja atualmente no diretório / tmp e o diretório contenha os arquivos: backup-20151219.zip, backup-20151220.zip, backup-20151221.zip.

Então meu comando de busca é:

[root@server tmp]# find /tmp -type f -mtime +2 -name backup* -exec rm -f {} \;

E recebo o seguinte:

find: paths must precede expression: backup-20151219.zip
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

Isso é porque ele corresponde ao regex de backup * e o usa como o padrão de pesquisa, em vez de usá-lo para filtrar os resultados. Que eu sei.

Se eu mudar para outro diretório que não contenha arquivos começando com o backup *, ele mostrará os resultados esperados.

Então, eu queria saber se existe uma maneira de pesquisar arquivos usando curingas enquanto estiver em um diretório que possa conter correspondências e mostrá-los como resultados.

Espero ter sido claro o suficiente. Obrigado por qualquer ajuda!

    
por Daichi42 21.12.2015 / 15:47

1 resposta

5

Em suma - sim, há caminho. Você simplesmente tem que escapar dos caracteres curinga de alguma forma. Existem várias maneiras de fazer isso, o método que mais uso é o de escapar dos curingas particulares:

find . -name backup\* -print

Ou simplesmente cite o padrão:

find . -name "backup*" -print

Outras maneiras funcionarão também - o ponto principal é de alguma forma impedir que o shell veja o curinga como uma expressão glob.

    
por 21.12.2015 / 15:50