Variable dentro de la ruta al archivo en el script bash

Variable dentro de la ruta al archivo en el script bash

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 basenamecomando en lugar de cutobtener el nombre del archivo.
  • En lugar de utilizar greplos resultados de find, puede utilizar, por ejemplo, findla opción -regexor -iregex.

Usar find -execcon 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 {} \;

información relacionada