Невозможно коснуться файлов с именем var в скрипте bash для цикла - PullRequest
0 голосов
/ 06 ноября 2019

Я редактирую скрипт для PiHole, чтобы конвертировать формат списка adblock в формат dns, чтобы его можно было использовать в PiHole. Идея состоит в том, чтобы прокрутить файл lists.list, который содержит ссылки на разные списки, сделать завиток для каждой ссылки этого файла и создать файл для каждой ссылки с именем $ link.list, который содержит все имена DNS.

* Проблема в том, что: * У меня есть сообщение "touch: not touch" https://easylist -downloads.adblockplus.org / easylistgermany.txt.list ': такого файла нетили каталог "

Я попытался выяснить, была ли это какая-то проблема с правами, поэтому я отнес ее в папку home / user. Если я делаю

curl --silent $source >> ads.txt 

или

touch ads.txt

, это работает

Вот что я написал:

for sources in `cat lists.list`; do
    echo $source
    touch "$source".list
    echo `curl --silent $source` > $source.list
    echo -e "\t`wc -l $source.list | cut -d " " -f 1` lines downloaded"
done

И я получаю

https://easylist-downloads.adblockplus.org/easylist.txt
touch: cannot touch 'https://easylist-downloads.adblockplus.org/easylist.txt.list': No such file or directory

Так есть предложения? Спасибо за ваше время!

1 Ответ

0 голосов
/ 06 ноября 2019

Это потому, что вы используете полный 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
...