for i in *.txt; do xxd -l 3 $i >> log done
Wie Variable in bash loggt
Ich möchte auch Dateinamen $i
für jedes Ergebnis protokollieren. Z.B .:
file_name result_of_command
for i in *.txt; do xxd -l 3 $i >> log done
Wie Variable in bash loggt
Ich möchte auch Dateinamen $i
für jedes Ergebnis protokollieren. Z.B .:
file_name result_of_command
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
Danke, ich habe versucht, echo an einem falschen Ort zu setzen. –
Sie wahrscheinlich brauchen nur printf
zu verwenden:
for f in *.txt; do
printf "%s: %s\n" "$f" "$(xxd -l 3 "$f")"
done >> log
Danke, es funktioniert auch. –
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.
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. –
@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? –
Es entspricht dem vollständigen Pfad, würde ich sagen. –
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. –
@ Jeremy-gurr, ja ich will $ i, gefolgt von dem Ergebnis. –