Wie bringt man Lynx dazu, Leerzeichen in Dateinamen zu erkennen?

Wie bringt man Lynx dazu, Leerzeichen in Dateinamen zu erkennen?

Ich verwende ein Skript, um eine Liste aller PDF-Dateien unter einer URL zu finden. Aber Lynx scheint ein Problem mit Leerzeichen in Dateinamen zu haben. Hier ist das Skript:

lynx --dump http://www.somesite/here/ | awk '/http/{print $2} | grep pdf > ~/Desktop/links.txt

Dies funktioniert wie erwartet, bis eine PDF-Datei mit Leerzeichen im Dateinamen vorhanden ist. Lynx scheint den Dateinamen an den Leerzeichen abzuschneiden. Gibt es eine Möglichkeit, dies zu verhindern?

Antwort1

awk verwendet (standardmäßig) Leerzeichen als Feldtrennzeichen, und lynx rendert ein Leerzeichen in einer ausgegebenen URL als Leerzeichen. Umgehen Sie das Problem, wie ich es in einem Fehlerbericht vorgeschlagen habe:

lynx -listonly -dump http://www.irgendeineSite/hier/ | \
awk '/\.pdf$/{ sub("^[ ]*[0-9]+.[ ]*","",$0); drucken}' > ~/Desktop/links.txt

Wenn der Inhalt in UTF-8 kodiert ist, lynxentkommtden Text (macht URL-Kodierungen rückgängig, wie%20), in diesem Fall wird ein Leerzeichen angezeigt (so dass es für awk zwei oder mehr Felder gibt, abhängig von der Anzahl der Leerzeichen im Namen).

Dieses Unescaping wurde für Debian durchgeführt#398274, im Jahr 2013 (d. h. Sie haben diese Funktion mit Ubuntu 18.04).

Hinzufügen der-listonlyOption reduziert die Anzahl falscher Übereinstimmungen, indem nur dieListevon URLs.

Wenn Sie nach mehreren Dateitypen suchen möchten, können Sie die Suffixe als Alternativen im regulären Ausdruck auflisten, beispielsweise so:

awk '/\.(pdf|odt|doc|docx)$/{ sub("^[ ]*[0-9]+.[ ]*","",$0); drucken}' > ~/Desktop/links.txt

verwandte Informationen