2016-12-15 12 views
-1

for i in *.txt; do xxd -l 3 $i >> log doneWie Variable in bash loggt

Ich möchte auch Dateinamen $i für jedes Ergebnis protokollieren. Z.B .:

file_name result_of_command

+1

Ich bin mir nicht sicher, ob ich verstehe, was Sie fragen. Du meinst, du willst das nur tun: echo "$ i" >> log? Bitte seien Sie klarer in dem, was Sie suchen. –

+0

@ Jeremy-gurr, ja ich will $ i, gefolgt von dem Ergebnis. –

Antwort

0

ich nicht ganz klar bin, was Sie fordern, aber das ist, was Sie wollen?

for i in *.txt; 
do 
    echo "$i" >> log 
    xxd -l 3 $i >> log 
done 
+0

Danke, ich habe versucht, echo an einem falschen Ort zu setzen. –

1

Sie wahrscheinlich brauchen nur printf zu verwenden:

for f in *.txt; do 
    printf "%s: %s\n" "$f" "$(xxd -l 3 "$f")" 
done >> log 
+0

Danke, es funktioniert auch. –

0

Es ist besser find mit der -exec Option zu verwenden, um einen Befehl für jede Datei die bestimmte Kriterien erfüllen auszuführen. Wenn Sie möchten, dass alle Dateien in Ihrem aktuellen Verzeichnis mit *.txt übereinstimmen, können Sie find verwenden. Sie können die Option -exec verwenden, um einen Befehl für jede Datei auszuführen. {} ersetzt den Namen der Datei und \; (ein Escapezeichen ; beendet den Befehl). Sie können stattdessen + verwenden, um zu sagen, dass er {} durch mehrere Dateinamen ersetzen soll.

Beachten Sie, dass das obige Beispiel versteckte Dateien enthält, die Sie mit einem Regex ausschließen können.

find . -type f \(! -regex '.*/\..*' \) -name '*.txt' -maxdepth 1 -exec xxd -l 3 {} \; >> log 

Auch, wenn Sie Dateien im aktuellen Verzeichnis werden werden Globbing und sie in Befehlen, immer ./* verwenden. Pfade, die mit - beginnen, werden wahrscheinlich von Ihrem Befehl als Optionen interpretiert.

+1

Ich glaube nicht, dass eine For-Schleife an einem dieser Mängel leidet. Laut [this] (http://www.in-ulm.de/~masheck/variable/argmax/) ist es eigentlich ein Heilmittel für Befehle mit zu langer Argumentliste; und Dateinamen mit Leerzeichen werden von Globs gut behandelt. –

+0

@benjaminw Ich denke du hast Recht. Verwendet ein Literal-Glob-Muster in einer for-Schleife auf einem beliebigen Zeichen in IFS oder stimmt die Schleifenvariable immer mit einem vollständigen Pfad überein, in den der Glob expandiert werden könnte? –

+1

Es entspricht dem vollständigen Pfad, würde ich sagen. –