Esto es probablemente bastante fácil, pero no puedo resolverlo. En un ciclo for, quiero excluir ciertos archivos con el prefijo zz (por ejemplo zz131232.JPG ), pero no sé cómo excluir estos archivos.
for i in *.JPG; do # do something done ¿Cómo modifico la 'regla for' para excluir archivos con el prefijo zz ?
Algo como
for i in *.JPG; do [[ $i != "zz"* ]] && echo "$i" doneo saltarlos:
for i in *.JPG; do [[ $i == "zz"* ]] && continue # process the other files here doneSi está tratando con muchos archivos, también puede usar GLOBIGNORE o extended globbing para evitar expandir los archivos que desea omitir en primer lugar (que podría ser más rápido):
GLOBIGNORE='zz*' for file in *.JPG; do do_something_with "${file}" done # save and restore GLOBIGNORE if necessaryo
shopt -s extglob # enable extended globbing for file in !(zz*).JPG; do do_something_with "${file}" done shopt -u extglob # disable extended globbing, if necessary Tenga en cuenta que si no hay archivos .JPG en el directorio actual, el bucle aún se ingresará y $i se establecerá en el literal *.JPG (en su ejemplo), por lo que debe verificar si el archivo existe dentro del bucle o utilice la opción nullglob .
for file in *.JPG; do [ -e "${file}" ] || continue do_something_with "${file}" doneo
shopt -s nullglob for file *.JPG; do do_something_with "${file}" done shopt -u nullglob # if necessary Pruebe lo siguiente en su shell para comprender qué sucede sin nullglob :
$ for f in *.doesnotexist; do echo "$f"; done *.doesnotexist