
Utilizo este código en mis scripts para procesar archivos dentro de una carpeta, pero solo funciona para subcarpetas.
if [ -d "$1" ]; then for file in "${1%/}/"*/*(*.mkv|*.mp4|*.avi); do
Sé que puedo eliminarlas /*
para trabajar con carpetas planas, pero estoy buscando una forma más limpia de manejar tanto las carpetas planas (sin subcarpetas) como las carpetas con subcarpetas.
Tengo un código grande en el bucle for, por lo que no quiero soluciones que dependan defind
Respuesta1
Pruebe globstar
y extglob
cuál es específico parabash
#!/usr/bin/env bash
shopt -s globstar extglob
if [[ -d $1 ]]; then
for file in "$1"/**/*.@(mkv|mp4|avi); do
:
done
fi
Respuesta2
Tengo un código grande en el bucle for, por lo que no quiero soluciones que dependan de
find
Si cambia el for
bucle a while
bucle y usa read
, es fácil confiar en él find
sin necesidad de refactorizar más lo que hay dentro del bucle:
find "$1" -name "*.mkv" -o -name "*.mp4" -o -name "*.avi" -print0 | \
while read -d '' file; do
# Process file
done