Supongamos que necesito contar todos los archivos del directorio que terminan en o. (por ejemplo ab12.14o, 70010340.09o). ¿Qué comando necesito usar?
Lo intenté ls *.o | wc
pero no funciona.
Respuesta1
Probablemente solo necesite eliminar .
de su expresión global, lo que hace que solo coincida con archivos que terminan en .o
en lugar deo
Sin embargo, una mejor manera sería utilizar find
:
find . -maxdepth 1 -name '*o' -printf 'x' | wc -c
Puede agregar -type f
para limitarlo a archivos simples (excluir directorios) y eliminarlos -maxdepth 1
si desea contar de forma recursiva.
Respuesta2
No lo uses ls
.
Utilice una matriz de shell para almacenar el nombre de los archivos que terminan en o
:
files=( *o )
Ahora haz:
echo "${#files[@]}"
para obtener el número de archivos.
@steeldriver ha dejado claro que si no tiene nombres de archivos coincidentes, el patrón global se tomará literalmente. Debido a esto, aunque no haya nombres de archivos coincidentes, el recuento de archivos seguirá siendo 1.
Para superar esto, configure la opción nullglob
o failglob
shell:
shopt -s nullglob
shopt -s failglob