Есть некоторые проблемы с вашим скриптом, поскольку вы используете кавычки в файле с URL-адресами/местоположениями загрузки.
А именно, что, когда у вас есть файл, как у вас есть, $dl
становится "site" and
$nm `остается, как вы и ожидали.
Чтобы сделать это, вам нужно либо изменить файл так, чтобы в местах загрузки сайта не было кавычек, а затем вам нужно установить кавычки вокруг $dl
в скрипте.
Таким образом, вы закончите с этим:
список входных файлов:
site,foobar.baz
Сценарий:
#!/bin/bash
while IFS=, read dl nm
do
echo $dl
echo $nm
/usr/bin/ffmpeg -loglevel error -protocol_whitelist file,http,https,tcp,tls,crypto -i "$dl" -c copy $nm
done < $1
Вы также можете заключить $nm
в кавычки, если у вас есть имя файла, в котором есть пробелы, но это ваше решение.
Как обсуждалось в комментариях, OP использует оболочку bash
в своем QNAP. устройство, но поскольку это Bash 3 globstar, его нельзя использовать, потому что в нем добавлено в Bash 4.0. В этом случае find
является одним из возможных решения.
Пример:
Сначала создайте примерную структуру каталогов и создайте xyz файлы:
$ mkdir -p 1/2/3
$ touch a_xyz_a 1/2/b_xyz_b 1/2/3/c_xyz_c
Теперь запустите find
+mv
:
$ find. -name "*xyz*" -exec sh -c 'echo mv -i "$1" "${1//xyz/abc}";' sh {} \;
mv -i./a_xyz_a./a_abc_a
mv -i./1/2/3/c_xyz_c./1/2/3/c_abc_c
mv -i./1/2/b_xyz_b./1/2/b_abc_b
Удалите echo
, чтобы выполнить mv
.