
У меня есть файл, содержащий около 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 {} \;