SH -C '...' SH {} не работает при использовании, если оператор и имеющий «в именем файле

У меня есть следующий упрощенный скрипт:

find /home/cas/plex-media/series/ -type f ! -name "*.srt" -exec sh -c '
    file=$1
    if [ if-statement using $file ]; then 
        echo "true"
    else 
        echo "false"
    fi
' find-bash {} \;

Сценарий работает отлично работает, если только нет в имени файла (например, / Home / Cas / CAS / Plex-Media / Series / Legend Of Korra / Season 4 / Легенда о KRORA - S04E11 - Gambit Kuvira Gambit.mkv ), в этом случае я получу следующую ошибку:

find-bash: 1: [: =: unexpected operator

Я не знаю, как исправить Это. Когда имя файла не имеет , скрипт работает отлично.

Редактировать, чтобы ответить на вопросы: Вот полный скрипт. Я сначала упростил, потому что если утверждение IF очень очень долго. Но вы хотели полную вещь, так что здесь она есть. Обычно это одна длинная линия, но я развернул ее, чтобы вы могли прочитать его легче.

find /home/cas/plex-media/series/ -type f ! -name "*.srt" -exec bash -c '
file="$1"; 
echo "$file"; 
thetvdb=$(GET http://192.168.2.15:32400/library/sections/2/all?X-Plex-Token=HfXBs23FhKBGj3msHjAz | grep $(curl -sSL https://thetvdb.com/series/$(echo "$file" | grep -o "series/.*/Season" | grep -o "/.*/" | sed "s|/||g" | sed "s| |-|" | sed "s| |-|" | sed "s| |-|" | sed "s| |-|" | sed "s| |-|" | sed "s| |-|" | sed "s|(||" | sed "s|)||") | grep -A 1 "<strong>TheTVDB.com Series ID</strong>" | grep -E -o "[0-9]{1,9}")); 
themoviedb=$(GET http://192.168.2.15:32400/library/sections/2/all?X-Plex-Token=HfXBs23FhKBGj3msHjAz | grep $(curl -sL https://www.themoviedb.org/search?query=$(echo "$file" | grep -o "series/.*/Season" | grep -o "/.*/" | grep -E -o "[A-Z].*[a-z]" | sed "s| |+|g") | grep "href=\"/tv/.*\"><h2>" | head -n1 | grep -oE "/tv/[0-9]{1,9}" | grep -oE "[0-9]{1,9}")); 
if [[ 
$(GET http://192.168.2.15:32400
        $(GET http://192.168.2.15:32400
                $(GET http://192.168.2.15:32400
                        $(echo 
                                $(if [[ -z "$thetvdb" ]]; 
                                then echo "$themoviedb" | grep -o "key=\".*/children\" guid"; 
                                else echo "$thetvdb" | grep -o "key=\".*/children\" guid"; 
                                fi)
                         | grep -o "/.*/children"
                         )?X-Plex-Token=HfXBs23FhKBGj3msHjAz | grep "index=\"$(echo "$file" | grep -Eo "/Season [0-9]{1,3}" | grep -Eo "[0-9]{1,3}")\"" | grep -o "key=\"/.*/children\" parentRatingKey" | grep -o "/.*/children"
                )?X-Plex-Token=HfXBs23FhKBGj3msHjAz | grep -B 2 "$file" | grep -o "key=\".*\" parentRatingKey" | grep -Eo "/.*/[0-9]{1,9}"
        )?X-Plex-Token=HfXBs23FhKBGj3msHjAz | grep -o "streamType=\"3\"" | head -n1
) = "streamType=\"3\"" ]]; then echo "true"; else echo "false"; fi' find-bash {} \;

Я могу понять это, если вы не можете понять это полностью. Так что я объясню это немного.

Цель скрипта заключается в том, что он принимает каждый медиа-файл в папке моей серии и проверяет, имеет ли у него субтитры. Не имеет значения, если они интегрированы или внешнее. Я использую Plex API, чтобы перейти на страницу информации о файле и посмотреть, есть ли StreamType = «3» , что означает, что есть субтитры.

Сначала устанавливает переменные ThetVDB и ThemoviedB . Затем он загружает страницу API всей серии, у меня в моем My Plex Media Server. Он ищет правильные серии, из которых файл (для этого нам нужны эти переменные). Затем захватывает ключ для этой серии.

Затем он делает еще один запрос API с этим ключом, что дает вам информацию о серии, и это сезоны. Затем он захватывает сезон файл из и захватывает ключ.

Затем он делает другой запрос с этим новым ключом, ведущим к странице о сезоне и эпизодах в нем. Затем он ищет эпизод и захватывает ключ.

Затем другой запрос сделан с этим ключом, давая информацию о эпизоде. А затем хватает streamtype = "3" . Если вывод всего, что равно streamtype = "3" , он верно. Если эта строка не была присутствующей (ака, файл не имеет субтитров), результатом всей вещи будет пустым, потому что он не мог записать строку. Который не равен Streamtype = «3»

-1
задан 23 January 2021 в 12:31

1 ответ

Если 1 содержит символ , то, что завершает команду quicked файл = $ 1; ... . Все, что после » находится за пределами параметра -C . Это дает ошибку. Попробуйте процитировать $ 1 в двойных кадинатах: «Файл =« $ 1 »; ... . Также цитату $ файл в двойных кавычках в , если команда .

-1
ответ дан 18 March 2021 в 23:41

Другие вопросы по тегам:

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