Ich benötige einen Bash-Befehl, um die gesamte Datei zu löschen, wenn die Datei selbst mit beginnt <html>
.
Ich bin mir nicht sicher, wie ich das am besten angehen soll ...
Kontext: Ich lade eine Reihe von Dateien über Curl-Anfragen herunter. Meistens funktionieren die Downloads und die Verarbeitung einwandfrei. In anderen Fällen führt die Download-Anfrage jedoch aus irgendeinem Grund zu einem 404. Wenn ich diese bekomme, beginnt der Inhalt der heruntergeladenen Datei mit einem HTML-Tag. Wenn der Rest meiner Verarbeitung auf diese Datei trifft, hängt sie. Daher möchte ich vor meiner anderen Verarbeitung einen Befehl ausführen, um jede der Dateien zu katzen und die Datei zu löschen, wenn sie dieses HTML-Tag hat.
command-line
bash
rm
Sei mein Freund
quelle
quelle
<html>
einer Datei beginnen oder diese löschen<html>
?<!doctype something>
.Antworten:
Um die Frage zu beantworten, die Sie dazu veranlasst hat, diese Frage zu stellen, und nicht die, die Sie tatsächlich gestellt haben:
curl kann Ihnen zusätzlich zum Herunterladen der Datei den Statuscode mitteilen. Sie müssen den Inhalt der Datei dafür nicht überprüfen. Ein Beispiel für die Überprüfung des Status ist
Die verschiedenen Optionen, mit denen Sie arbeiten können,
-w
sind im Handbuch dokumentiert. Abhängig von Ihren Anforderungen möchten Sie diese möglicherweise erweitern, um mehr Informationen auszugeben und zu analysieren, und / oder die Überprüfung des Statuscodes so ändern, dass mehr als nur 200 zulässig sind.quelle
$file
Verwenden Sie daher stattdessen entweder"$file"
oder"${file}"
. Aus Sicherheitsgründen sollten Sie auch die URL entweder"$url"
oder angeben"${url}"
.rm
sollte--
vor dem Dateinamen. Einige Leute verwenden wirklich Dateien mit dem Namen-i
.Mit diesem Befehl find können Sie alle Dateien löschen, die nur das
<html>
Muster in der ersten Zeile enthalten:quelle
\;
?\;
ist erforderlich, um das Ende der-exec
Aktion zu identifizieren-exec sh -c 'head -1 "$0" ...' {} \;
ist zuverlässiger.Ich habe das gerade getestet, es funktioniert.
Führen Sie
shopt
zuerst aus, weil wir nicht analysieren möchtenls
:Verwenden Sie dann eine einfache Bash-
for
Schleife, um Dateien zu finden, die mit beginnen,<html>
und entfernen Sie sie:Es wäre sicherer zu verwenden:
zu haben ,
rm
zu fragen , bevor alle Dateien, nur für den Fall zu entfernen.Beachten Sie, dass dies
shopt
nicht unbedingt erforderlich ist, aber verhindert, dass bestimmte Probleme auftreten, wenn das Verzeichnis leer ist oder eine Datei mit einem Sternchen im Namen vorhanden ist.quelle
Nicht jede Automatisierungsaufgabe sollte mit Shell ausgeführt werden. Hier ist stattdessen ein Python-Skript
Vielleicht ist es ausführlicher als die entsprechenden Bash-Befehle, aber es ist
quelle