
Tengo un archivo que contiene alrededor de 20k cadenas. Cada cadena en ese archivo debe ser un argumento para un comando dentro del script bash.
Al principio mi script genera un archivo con estas cadenas.
find /home/alotoffolders -type f -name "*.mp4" | grep some_greps > ~/tests/find_smth
Después de eso, intentar establecer una variable, eso será parte del argumento.
filename=$(cut -d/ -f11 ~/tests/find_smth)
Luego intento leer todos los archivos línea por línea y usar cada cadena como argumento de entrada (parece que funciona), pero para la salida, hay algún problema.
for i in `cat ~/tests/find_smth`; do ./other_script -input $i -output /home/folder1/folder2/$filename; done
El script no puede ver la ruta estática antes de $filename.
¿Dónde está el problema?
Respuesta1
- Nunca usar
for i in $(cat ...) ...
o similar. Recorre palabras, no líneas. E incluso si así fuera, los nombres de archivos pueden contener nuevas líneas. - Usarexpansión de parámetros de shello
basename
comando en lugar decut
obtener el nombre del archivo. - En lugar de utilizar
grep
los resultados defind
, puede utilizar, por ejemplo,find
la opción-regex
or-iregex
.
Usar find -exec
con sh -c
:
find /home/alotoffolders -type f -iregex 'some_pattern.mp4' \
-exec sh -c '
/path/to/other_script -input "$1" -output "/home/folder1/folder2/${1##*/}"
' find-sh {} \;