无法在循环的bash脚本中接触具有var名称的文件
我正在为PiHole编辑一个脚本,将adblock列表格式转换为dns格式,以供PiHole使用。 其思想是滚动一个lists.list文件,其中包含指向不同列表的链接,对该文件的每个链接进行卷曲,并为每个名为$link.list的链接创建一个包含所有dns名称的文件 *问题是: 我收到消息“touch:cannottouch”:没有这样的文件或目录 我试着看看这是否是版权问题,所以我把它放到了我的主/用户文件夹中。 如果我这样做无法在循环的bash脚本中接触具有var名称的文件,bash,for-loop,touch,var,Bash,For Loop,Touch,Var,我正在为PiHole编辑一个脚本,将adblock列表格式转换为dns格式,以供PiHole使用。 其思想是滚动一个lists.list文件,其中包含指向不同列表的链接,对该文件的每个链接进行卷曲,并为每个名为$link.list的链接创建一个包含所有dns名称的文件 *问题是: 我收到消息“touch:cannottouch”:没有这样的文件或目录 我试着看看这是否是版权问题,所以我把它放到了我的主/用户文件夹中。 如果我这样做 curl--silent$source>>ads.txt 或
curl--silent$source>>ads.txt
或
touch ads.txt
它起作用了
以下是我写的:
用于“cat list.list”中的源;做
echo$源
触摸“$source”。列表
echo`curl--silent$source`>$source.list
echo-e“\t`wc-l$source.list | cut-d”“-f 1`line下载”
完成
我得到
https://easylist-downloads.adblockplus.org/easylist.txt
触摸:不能触摸'https://easylist-downloads.adblockplus.org/easylist.txt.list':没有这样的文件或目录
有什么建议吗?
谢谢你的时间 这是因为您使用完整URL作为文件名,但文件名中不能有斜杠。你能把文件命名为URL的最后一位吗?那么这应该是可行的:
#!/bin/bash
for source in `cat lists.list`; do
echo $source
filename=$(sed -E 's@.+/@@' <<< $source).list # <-- remove everything up to and including the last slash
curl --silent "$source" -o "$filename"
echo -e "\t`wc -l $filename | cut -d " " -f 1` lines downloaded"
done
#/bin/bash
对于“cat list.list”中的源;做
echo$源
文件名=$(sed-E's@.+/@@太好了!如果你满意,你可以把答案标为“接受”,然后我得到了一些甜蜜的、甜蜜的声誉点。一条评论:你为什么要使用猫列表。列表
?我刚从原始文件中复制了它。这是迭代文件内容的多种方法之一。@saintamh:是的,但这似乎是UOOC的情况。最好使用while循环或类似的方法进行迭代。我编辑了你的帖子。感谢伟大的answeR