Замена символов в нескольких файлах в нескольких каталогах

Есть некоторые проблемы с вашим скриптом, поскольку вы используете кавычки в файле с 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в кавычки, если у вас есть имя файла, в котором есть пробелы, но это ваше решение.

1
03.02.2020, 23:13
1 ответ

Как обсуждалось в комментариях, 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.

0
28.04.2021, 23:24

Теги

Похожие вопросы