staging.inyokaproject.org

Dateien einer Dateiliste zur Weiterverarbeitung weiterreichen

Status: Gelöst | Ubuntu-Version: Kubuntu 16.04 (Xenial Xerus)
Antworten |

Cordess

Anmeldungsdatum:
14. Mai 2006

Beiträge: Zähle...

Gibt es, ohne ein Skript mit Schleifenkörper zu schreiben, eine elegante Möglichkeit, eine Anzahl von Dateien aus einer Dateiliste zur Weiterbearbeitung direkt aber einzeln weiterzuleiten? Und das ohne Umwege über eine Ausgabe in eine Datei?

Was ich gerne machen würde wäre bspw. so etwas:

1
grep SUCHBEGRIFF dateiliste WUNDEROPERATOR sha256sum

Wobei WUNDEROPERATOR hier etwas sein soll, welches mir jede Zeile aus stdout, also was grep ausgegeben hat, einzeln an sha256sum weiterreicht, so dass dieses den Hash aus der übergeben Datei berechnen kann.

Leider bietet sha256sum direkt keine Möglichkeit, per Parameter eine Dateiliste zu übergeben um daraus dann für jede einzelne Datei Prüfsummen zu erstellen.

Oder gibt es vielleicht ein Kommandozeilenprogramm, das so etwas durchführen kann?

Also ein Programm, das einen Text per PIPE aus stdout einlesen kann, dann jede Zeile der stdout Ausgabe als Dateinamen interpretiert und für den dann der gewünschte Befehl, der diesem Programm beim Start als Parameter übergeben wurde, dann einzeln aufgerufen wird?

Also ungefähr so:

1
grep SUCHBEGRIFF dateiliste.txt | superprogramm "sha256sum"

Prinzipiell müsste so etwas ja leicht programmierbar sein, wenn man das per Parameter angegebene Programm (hier sha256sum) dann per system() Aufruf mit dem Dateinamen aus der Liste als Parameter aufruft, aber vielleicht hat jemand schon diese Arbeit vorher gemacht und jemand kennt den Namen so eines Programms.

EDIT:

Okay, ich bin der Sache schon näher gekommen. awk und xargs ist hier eine Große Hilfe, allerdings klappt es noch nicht ganz, weil awk Dateien mit Leerzeichen von Zusatzeinträgen von grep nicht unterscheiden kann und ein print somit nicht ausreicht. Ich werde mal prüfen was ich da machen kann.

Hier aber schon einmal der Grundaufbau der vom Prinzip her in die richtige Richtung geht:

1
grep SUCHBEGRIFF dateiliste.txt | awk '{ print $1 }' | xargs sha256sum 

EDIT2:

Okay, gelöst.

In meiner Dateiliste waren die Dateien von den Zusatzeinträgen mit einem Doppelpunkt als Trennzeichen getrennt. Daher musste ich awk mit der Option -F : aufrufen, was dazu führt, das awk den Doppelpunkt als Trennzeichen verwendet.

Damit xargs Dateien mit Leerzeichen im Namen nicht als einzelne Dateien auftrennt musste ich sie lediglich Zeilenweise einlesen. Das gelang mit dem Newline Operator als bestimmendes Trennzeichen. Dieses wurde mit -d "\n" definiert.

1
grep SUCHBEGRIFF dateiliste.txt | awk -F : '{ print $1 }' | xargs --d "\n"  sha256sum
Antworten |