
Es tan extraño que a veces el siguiente patrón de -name en buscar puede buscar inesperadamente todos los nombres de archivos correspondientes con éxito. Por derechos, solo podía buscar un nombre de archivo correspondiente en el directorio actual a través del análisis del shell (no encontrar la utilidad sin comillas).
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
Respuesta1
Sin ninguna cotización *.txt
está sujeto aexpansión de nombre de ruta (también conocida como expansión de nombre de archivo). Esto sucede en eldirectorio de trabajo actual(CWD). Si el CWD contiene archivos con extensión 'txt', antes de llamar find
al shell, reemplaza el *.txt
parámetro con los nombres de archivo coincidentes y su comando se convierte en algo como esto:
find /tmp -type f -name file1.txt file2.txt file3.txt ...
Hay al menos tres resultados que puedes obtener dependiendo de si la expansión regresa...
- ...varios archivos:obtendrás un error
- ...un archivo y su nombre coincide con un nombre de archivo en las rutas en las que se está ejecutando
find
:la-name
prueba coincidirá solo con ese archivo - ...un archivo y no coincide con ningún archivo en las rutas buscadas:
-name
no coincidirá con nada
Por otro lado, si la CWD nonocontiene archivos de texto, luego *.txt
se pasa find
y se comporta exactamente igual que si lo hubiera citado.
Moraleja: cuando lo use, find
coloque siempre comillas alrededor de los patrones que contengan globos, a menos que realmente desee que se produzca la expansión del nombre de la ruta (rara vez verá que esto se haga intencionalmente para la -name
opción).