
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-listonly
Option 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