Переменная в пути к файлу в скрипте bash

Переменная в пути к файлу в скрипте bash

У меня есть файл, содержащий около 20 тыс. строк. Каждая строка в этом файле должна быть аргументом для команды в скрипте bash.

Сначала мой скрипт генерирует файл со следующими строками.

find /home/alotoffolders -type f -name  "*.mp4" | grep some_greps > ~/tests/find_smth

После этого пытаемся задать переменную, которая будет частью аргумента

filename=$(cut -d/ -f11 ~/tests/find_smth)

Затем я пытаюсь прочитать весь файл построчно и использовать каждую строку в качестве входного аргумента (вроде бы это работает), но вот с выводом возникают некоторые проблемы.

  for i in `cat ~/tests/find_smth`; do ./other_script -input $i -output /home/folder1/folder2/$filename; done

Скрипт не видит статический путь перед $filename.

В чем проблема?

решение1

  • НИКОГДА не используйте for i in $(cat ...) ...или что-то подобное. Он зацикливается на словах, а не на строках. И даже если бы он это делал, имена файлов могут содержать новые строки.
  • Использоватьрасширение параметра оболочкиили basenameкоманду вместо , cutчтобы получить имя файла.
  • Вместо использования grepрезультатов findможно использовать, например, параметр find« -regexили» -iregex.

Использовать find -execс 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 {} \;

Связанный контент