En un script bash, ¿cómo puedo decir 'para todos los archivos de tipo .png o .PNG'?
Lo estoy intentando :
for i in (`ls *.PNG` && `ls *.png`)
pero obteniendo un error de sintaxis.
fuente
En un script bash, ¿cómo puedo decir 'para todos los archivos de tipo .png o .PNG'?
Lo estoy intentando :
for i in (`ls *.PNG` && `ls *.png`)
pero obteniendo un error de sintaxis.
Si desea todas las combinaciones posibles, use:
for i in *.[Pp][Nn][Gg]; do
o
shopt -s nocaseglob
for i in *.png; do
aunque ese hará que todos los globos de shell de su script (es decir, coincide con el archivo comodín) no distingan entre mayúsculas y minúsculas hasta que se ejecute shopt -u nocaseglob
.
Si realmente quiere solo .PNG y .png (y no, por ejemplo, .PnG o .pnG), use cualquiera
shopt -s nullglob
for i in *.png *.PNG; do
o
for i in *.png *.PNG; do
[[ -e "$i" ]] || continue
... el motivo de la comprobación de existencia nula o de globo es que si solo tiene extensiones en minúsculas o mayúsculas, incluirá el patrón no coincidente en la lista de archivos, lo que provocará un error en el cuerpo del bucle. Al igual que con nocaseglob, es posible que desee desactivar la opción de shell nullglob después (aunque en mi experiencia tener nullglob activado a menudo es bueno, especialmente en un script). En realidad, más bien considero que es una buena idea usar nocaseglob o la verificación de existencia para todas las coincidencias de archivos como esta, en caso de que no haya coincidencias.
for i in *.{png,PNG}
También puedes probar una línea como
o
Editar
Véase también el comentario de @ Yab a continuación sobre la recursividad.
fuente
find -maxdepth 1 -iname "*.png"
ls
es casi inútil aquí, pero para el registro aquí hay una sintaxis más cercana a su intento:Notas:
fuente