LINUX.ORG.RU

wget - форсить корректное имя файла

 ,


0

2

Суть такая. Я скачиваю заглавную страничку русской Википедии wget'ом, а потом просматриваю командой links2 -g. wget запускается со следующими параметрами: -q -E -H -k -p -np -t 3 -T 10 -P /tmp/dir, где:

# -q: quit
# -E: Append .html to the file name if it is an HTML file but doesn't end in .html or similar
# -H: Download files from other hosts, too
# -k: convert Links
# -p: entire Website
# -np: Do not ever ascend to the parent directory when retrieving recursively
# -t: Retries
# -T: Full Timeout
# -P: Download Directory
В результате у меня в под/подпапке в /tmp есть файл
?%97аглавна?%8F_?%81?%82?%80ани?%86а.html
У меня как бы два вопроса в этой связи возникает.

Ну, конечно, имя файла корявое.

1. Как заставить wget давать нормальное имя моему html-файлу, который я скачиваю? Понятно, есть параметр -O, но он когда скачиваешь один файл, а не рекурсивно.

2. Попутно обнаружил, что find «не видит» этот файл. (допустим, командой find -iname "*.html". То есть для find он как бы невидим. Как заставить find находить файлы с такими корявыми именами? (просто интересно).

Локаль - LANG=en_US.UTF-8(если важно).

Не знаю про wget, но find такой файл без проблем находит. Запустите ″find″ под ″strace″, чтобы убедится, что ему точно приходит ″*.html″, что шелл не изменяет этот аргумент.

mky ★★★★★ ()
Ответ на: комментарий от forest22

Аргумент передаётся правильно, со нераскрытой звёздочкой. Какие именно имена файлов читает ″find″ не видно, попробуйте с опцией ″-v″ и укажите каталог поближе к проблемному файлу, чтобы было меньше вывода:

strace -e getdents64,write,fstat64 -v find /tmp/dir/ru.wikipedia.org -iname «*.html»

А касательно wget, то судя по этому: http://savannah.gnu.org/bugs/?47883 проблема с именами файлов возможно решена в версии 1.18.

mky ★★★★★ ()
Ответ на: комментарий от salsa

Да, --restrict-file-names=nocontrol работает. Стоит в ман'е.

$ LC_CTYPE=en_US.UTF-8 find ! -name \*

тоже прекрасно работает. Должен, конечно, почитать документацию по локалям.

forest22 ()
Ответ на: комментарий от mky

По поводу «strace»: https://nopaste.me/view/ccde1826.

Я не могу дать оценку по поводу «find», но как написал @salsa, так работает.

По поводу wget'а тоже не могу оценить, то ли баг на ГНУ, то ли параметр --restrict-file-names=nocontrol имеет место.

С вашей помощью немножко продвинулся.

forest22 ()
Ответ на: комментарий от forest22

nocontrol по замыслу должен отсекать только управляющие символы, как раз, чтобы не появлялось файлов с такими, невидимыми find'у именами. А он наоборот коверкает все не US имена.

Попробуйте ещё:

LC_ALL=C find -regex '.*\.html'

mky ★★★★★ ()
Ответ на: комментарий от mky

Я инсталлировал 1.18. Это решило проблему имени скачиваемого html-файла.

Спасибо!

forest22 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.