Ja, das kannst du mit for
. Auch wenn es "einen einfacheren Weg gibt, dies zu tun sort
" (aber ich glaube nicht), ist dies auch ziemlich einfach:
# cd to the directory you want to process mkdir sorted for file in *; do printf 'Processing %s\n' "$file" [ -f "$file" ] && sort -u "$file" > "./sorted/$file" done
Anmerkungen:
for file in *
verarbeitet keine Dateien in Unterverzeichnissen.printf
ist nur um Fortschritt zu melden. Tatsächlich sollte es nach[ ... ]
(siehe unten) platziert werden, aber ich möchte den Code nicht zu kompliziert machen. Sie können dieprintf
Zeile einfach entfernen, wenn Sie möchten, dass das Ganze stumm bleibt.[ -f "$file" ]
prüft, ob$file
es sich um eine reguläre Datei handelt. Bei dem allgemeinsten Muster (dh*
) benötigen wir diese Bedingung, um zu vermeiden, dasssort
dassorted
Verzeichnis als Argument verwendet wird (dies würde einen Fehler auslösen, harmlos, aber nicht elegant). Dieser Test wird höchstwahrscheinlich nicht benötigt, wenn Sie einen spezifischeren Globus wie*.txt
oder*.db
anstelle von verwenden*
(z. B. um eine Streudatei zu überspringendesktop.ini
, die nicht verarbeitet werden sollte). In diesem Fall können Sie[ ... ] &&
die Zeile auslassen und mit der Zeile beginnensort
(das Beibehalten der Zeile sollte jedoch nicht schaden).sort
unterstützt verschiedene Optionen, und Sie möchten möglicherweise einige davon verwenden, je nachdem, wie Sie sortieren müssen.sort -u
entdupliziert Einträge direkt nach dem Sortieren und ist bei Verwendung bereitssort
eine weniger redundante Alternative zur Verwendung desuniq
Befehls.
Wenn Sie Dateien nach Bedingungen auswählen mussten, die komplexer als ein einfacher Glob sind, ist es find
vielleicht besser, mit zu beginnen. Für deine aktuelle Aufgabe for
sollte es gut gehen.