Динамическое создание торрент-файлов с использованием bash - PullRequest
0 голосов
/ 29 июня 2019

Я пытаюсь создать .torrent файлы, используя create-torrent. У меня много файлов .mp4 во многих папках и подпапках.

Вот моя командная строка:

find . -type f -name "*.mp4" -exec bash -c 'create-torrent {} --urlList "http://127.0.0.1/test/{}" -o ${1%.mp4}.torrent' sh {}  \; -print

Это создаст .torrent для каждого файла .mp4 внутри папок и подпапок, эта команда выше работает!

Но я должен использовать «urlList» в качестве веб-семени. При использовании webseed мне нужна ссылка на http ссылку на файл .mp4, поэтому это причина скрывать / var / www /

Определение веб-семян: https://en.wikipedia.org/wiki/BitTorrent#Web_seeding

Итак, мне нужен реальный путь к текущему файлу .mp4.

Например, если у меня есть файл .mp4 в этой папке: / var / www / teste / folder1 / video.mp4 , у меня должна быть следующая командная строка:

find . -type f -name "*.mp4" -exec bash -c 'create-torrent {} --urlList "http://127.0.0.1/teste/folder/video.mp4/{}" -o ${1%.mp4}.torrent' sh {}  \; -print

Обратите внимание, что я не использую / var / www /

Я знаю команду в linux, которая показывает мне путь к файлу: readlink -f {name}

Но эта команда возвращается с / var / www /

Как я могу динамически вставить текущий каталог файла, исключая / var / www / для этой команды ниже?

find . -type f -name "*.mp4" -exec bash -c 'create-torrent {} --urlList "http://127.0.0.1/{REAL_PATH_WITHOUT_VARWWW}/{}" -o ${1%.mp4}.torrent' sh {}  \; -print

Я так много пытался это исправить, но мне не удалось Спасибо.

1 Ответ

0 голосов
/ 29 июня 2019

Простое исправление для команды readlink было бы:

readlink -f <your_mp4_file> | awk -F '/var/www' '{print $2}'

Возьмите / var / www в качестве разделителя и напечатайте второй столбец (все остальное).

Теперь, пример для вашего случая с использованием той же команды awk, что-то вроде этого:

# find /var/www/html/ -type f | awk -F '/var/www' '{print $2}'
/html/index.html
/html/something.html  

# for path in $(find /var/www/html/ -type f | awk -F '/var/www' '{print $2}'); do echo "do something with this -> $path"; done
do something with this -> /html/index.html
do something with this -> /html/something.html

Решение (с вашей командой):

for mp4 in $(find . -type f -name "*.mp4" | awk -F '.*/var/www' '{print $2}'); do bash -c "create-torrent $mp4 --urlList 'http://127.0.0.1/$mp4/{}' -o ${1%.mp4}.torrent" sh {}  \; -print; done

P.S. - Я не знаю, почему вы явно начинаете новую сессию Bash. Если у вас нет явного требования сделать это (т.е. выполнить команду на удаленных серверах), вы можете выполнить:

for mp4 in $(find . -type f -name "*.mp4" | awk -F '.*/var/www' '{print $2}'); do create-torrent $mp4 --urlList "http://127.0.0.1/$mp4/{} -o ${1%.mp4}.torrent; done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...