我使用 youtube-dl 下载 youtube m4a 文件
youtube-dl --download-archive downloaded.txt --match-filter 'duration > 1200' -cit -f 140 'httplink'
但我意外删除了下载的.txt。我尝试使用以下方法重新生成下载的.txt 文件
for n in *.m4a
do
if [[ "$n" =~ -[-_0-9a-zA-Z]{11}.m4a$ ]]
then echo "youtube ${n: -15: 11}" >> downloaded.txt
fi
done
但它不起作用,因为许多文件名很长,并且包含非 ASCII 字符,例如 CJK 字符、▶、表情符号。有什么好的建议可以解决这个问题吗?谢谢。
答案1
Konichiwa 在美国 我不认为我们可以自由下载 YouTube 视频。我希望有一个 YouTube 播放列表到 ISO 自动服务或脚本。
对于长文件名,请尝试tr -d [set1] [set2]
删除不需要的字符或tr -t [set1] [set2]
截断
7. Remove all non-printable character from a file
The following command can be used to remove all non-printable characters from a file.
$ tr -cd [:print:] < file.txt
以上内容摘自https://www.thegeekstuff.com/2012/12/linux-tr-command/
我不确定这一行,也许你可以用 cat yourFile 或 echo "foobar" 替换 youoldList 部分
then tr -cd [:print:] < youroldList.txt > downloaded.txt
sed 是流编辑器命令,请执行 man sed 来了解它,-e 命令可让您运行格式如下的 sed 脚本“s_replaceThis_withThis_;s/.m4a.*/./\”
下划线和///\ 部分可以写成“s///”
脚本错误
另外,在您的脚本中,有一个错误,用“>>”代替了“>”,并且如果 $n 的计算结果为 $(false) 或 $(0),它将重新启动 ba$h 并注入您的数据流。[可能是内存泄漏??]也许发生在 ${n: -15: 11}
您是否收到类似 $(0) 的错误?
答案2
如果所有文件都在一个目录中,您只需在 Nautilus 窗口中使用CTRL+选择它们,使用+A复制文件名(包括路径),然后打开文本编辑器并使用 + 将路径 + 所有文件名粘贴到文本文件中。CTRLCCTRLV
如果您不想在每行文件名前显示路径信息,请使用“搜索 > 查找和替换...”将其删除。使用路径字符作为搜索词,并将替换字段留空。