Lista de archivos de extensión particular

5

Ok esto es extraño. Estoy usando este código,

ls *.prj

Para enumerar todos los archivos con la extensión .prj en el directorio pero recibo este error,

bash: / bin / ls: lista de argumentos demasiado larga

Eventualmente deseo obtener el recuento de archivos y estaba usando,

ls * .prj | wc -l

Pero incluso este comando está dando el mismo error. ¿Alguna idea de a dónde me estoy yendo mal?

Sam007
fuente

Respuestas:

1

Nada, hay un límite en el número de argumentos con los que bash puede lidiar. Hacer

ls | grep '\.prj$' | wc -l
enero
fuente
Sí, eso funciona muy bien, eso es lo que quería. Deje pasar esta regla de 15 minutos y la seleccionaré como la respuesta correcta
Sam007
8

Use el findcomando en su lugar

 find . -name "*.prj"

También puedes combinar los comandos con find

find . -name "*.prj" -exec COMMAND {} \;

Espero que esto ayude.

devav2
fuente
eso sería correcto si todos los archivos del directorio tuvieran solo .prj extn, pero tengo archivos con los mismos nombres pero con diferentes extensiones y sus comandos los enumeran a todos
Sam007
pero al hacerlo ls *.prj, intenta enumerar los archivos con extn .prj, ¿verdad?
devav2
la respuesta está arriba
Sam007
3

Analizar la salida de lsno es confiable . Probablemente funcionará en su caso, pero lsmanipula caracteres no imprimibles. Aquí hay una forma totalmente confiable de contar los archivos que coinciden con una determinada extensión. Este fragmento de shell crea una matriz que contiene los nombres de archivo, luego imprime el número de elementos en la matriz.

a=(*.prj)
echo ${#a[@]}
Gilles
fuente
ok Intenté esto y echome está dando el valor 17 pero el valor real es 90419, que se calcula correctamente con los otros dos comandos anteriores
Sam007
2
@ Sam007 Lo siento, fue un error en mi comando, utilicé la sintaxis zsh que da un resultado diferente en bash. ${#a}en zsh calcula la longitud de la matriz, pero en bash da la longitud del primer elemento, y necesita ${#a[@]}obtener el número de elementos.
Gilles
Sí, eso está funcionando
Sam007