使用bash动态创建种子文件

时间:2019-06-29 17:21:02

标签: bash shell

我正在尝试使用create-torrent创建.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

这将为文件夹和子文件夹内的每个.mp4文件创建一个.torrent,上面的命令有效!

但是,我必须将“ 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 :(得分:0)

使用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