
É tão estranho que às vezes o seguinte padrão -name em find possa pesquisar inesperadamente todos os nomes de arquivos correspondentes com êxito. Por direito, ele só poderia pesquisar um nome de arquivo correspondente no diretório atual por meio da análise do shell (não encontrar o utilitário sem aspas).
find /tmp -type f -name *.txt
/tmp/amp_iostat.txt
/tmp/awrrpt_1_7950_7973.txt
/tmp/oplanlog/osys/2014-07-01-12-26-28/log.txt
/tmp/oplanlog/osys/2014-07-01-13-15-33/log.txt
/tmp/oplanlog/osys/2014-07-01-13-17-58/log.txt
/tmp/oplanlog/osys/2014-07-01-13-30-27/log.txt
/tmp/oplanlog/osys/2016-10-27-19-38-50/log.txt
/tmp/pms2_20170427.txt
/tmp/pmsdb1_20170622.txt
/tmp/pmssh1_20160728.txt
/tmp/pmssh1_20160831.txt
/tmp/pmssh1_20161227.txt
/tmp/pmssh1_20170328.txt
/tmp/pmssh1_20170523.txt
/tmp/pmssh1_20170727.txt
/tmp/pmssh1_20170822.txt
/tmp/pmssh2_20170328.txt
/tmp/pmssh_20170119.txt
/tmp/pmssh_20170220.txt
/tmp/sgpms_20140717_1736_summary.txt
/tmp/sgpms_20140717_1736_trace.txt
/tmp/sgpms_20140717_1737_summary.txt
/tmp/sgpms_20140717_1737_trace.txt
/tmp/sgpms_20140717_1739_summary.txt
/tmp/sgpms_20140717_1739_trace.txt
/tmp/sgpms_20140717_1743_summary.txt
/tmp/sgpms_20140717_1743_trace.txt
/tmp/sgpms_20140717_1749_summary.txt
/tmp/sgpms_20140717_1749_trace.txt
/tmp/sgpms_20140717_1751_summary.txt
/tmp/sgpms_20140717_1751_trace.txt
find /tmp -type f -name *.txt|wc -l
31
Responder1
Sem qualquer cotação *.txt
está sujeito aexpansão do nome do caminho (também conhecida como expansão do nome do arquivo). Isso acontece nodiretório de trabalho atual(CWD). Se o CWD contiver algum arquivo com extensão 'txt', antes de chamar find
o shell, substitua o *.txt
parâmetro pelos nomes de arquivo correspondentes e seu comando se tornará algo assim:
find /tmp -type f -name file1.txt file2.txt file3.txt ...
Existem pelo menos três resultados que você pode obter dependendo se a expansão retornará...
- ...vários arquivos:você receberá um erro
- ...um arquivo e seu nome corresponde a um nome de arquivo no(s) caminho(s) em que você está executando
find
:o-name
teste corresponderá apenas a esse arquivo - ...um arquivo e não corresponde a nenhum arquivo no(s) caminho(s) pesquisado(s):
-name
não combinará com nada
Por outro lado, se o CWD nãonãocontém qualquer arquivo txt e *.txt
é passado para ele find
e se comporta exatamente da mesma forma como se você o citasse.
Moral: ao usar, find
sempre coloque aspas em torno dos padrões que contêm globs, a menos que você realmente queira que a expansão do nome do caminho ocorra (raramente você veria isso feito intencionalmente para a -name
opção).