Angenommen, ich habe eine list.txt
der Dateien, die ich überprüfen möchte.
cat list.txt
und für jede Datei möchte ich eine Aktion ausführen
cat list.txt | xargs -I {} touch {}
Aber je nach Ausgang der Aktion möchte ich entsprechend reagieren:
cat list.txt | xargs -I {} touch {} | if [-z - ]; then echo "blank file"; fi;
Dies funktioniert nicht richtig und ich bin mir nicht sicher, warum nicht ... Also, wie kann ich den Wert von stdout
-? - - richtig testen und als Bonus, wie kann ich den Inhalt von {}
an die letzte Portion weitergeben? Zur Wirkung von:
cat list.txt | xargs -I {} touch {} | if [-z - ]; then echo "{} is a blank file"; fi;
Vielleicht sollte dies ein vollständiges Bash-Skript sein, aber ich würde es vorziehen, wenn ich dies in einer Zeile lernen könnte, da die Anwendungen dafür in vielerlei Hinsicht nützlich sein könnten -
Hier ist ein praktischeres Beispiel:
time john -incremental -stdout | grep 'clientsWeakPassword' | if [ ! -z - ]; then exit 0;
Dieses Skript generiert also zufällig Passwörter und stoppt, wenn das angegebene Passwort erreicht wird. Es zeigt an, wie lange es gedauert hat, dieses Passwort zu "knacken" ...
Und im Idealfall würde es auch so etwas wie "'clientsWeakPassword' brauchte XMinuten, um durch Zufallsraten zu knacken" ausgeben.
Diese Kette kann jedoch auch verwendet werden, um in Protokolldateien usw. usw. usw. nach einer bestimmten Sache zu suchen.
Ich hoffe auf jeden Fall, dass mich jemand in die richtige Richtung weisen kann.
Danke vielmals -
quelle
cat list.txt | xargs ...
, aber es sind ein oder mehrere Dateizugriffe erforderlich, um einencat
anderen zu finden , um eine Pipe zu öffnen, und dann möglicherweise eine Gruppe von Seiten auszutauschen, um Speicherplatzcat
freizugeben, und die gesamte Datei zu lesen, um sie zur Ausführung in den Speicher zu kopieren. und der Aufwand, den Prozess und die Pipe danach zu schließen und schließlich die Seiten, diecat
verschoben wurden, in den Speicher zurückzuspeichern .xargs <list.txt ...
.cat list.txt | ...
, um das Empfängerprogramm von Ihrer Eingabedatei zu isolieren. Und ich gehe davon aus, dass Effizienz keine Rolle spielt, wenn Sie einen einmaligen Befehl ausführen (obwohl in meinem Fall die Anzahl der Eingaben eine Rolle spielt!).cat something > some_file
dass dies eine Gewohnheit ist, die ich abbrechen sollte, wenn ich mich im Bash verbessern möchte - also danke Du -!Antworten:
Wenn Sie mehr als eine Sache machen wollen, erzeugen Sie eine Shell:
Zu diesem Zeitpunkt können Sie jedoch auch eine
while read
Schleife anstelle von xargs verwenden.quelle
while read
, also ist es genau das, was ich wissen muss ... Mein Beispiel war jedoch theoretisch und was ich wirklich brauche, ist es zu haben diestdout
in der if-Anweisung ... (Touch war offensichtlich eine schlechte Wahl, da es keine stdout ...)if
selbst macht nichts mit stdout. Der folgende Befehlif
könnte. Ich denke, Sie müssen Ihre Frage klarer formulieren, was Sie tatsächlich versuchen.