Durchlaufen von Alphabeten in Bash


82

Ich möchte mvalle Dateien, die mit 'x' beginnen, in das Verzeichnis 'x' verschieben. etwas wie:

mv path1/x*.ext path2/x

und mache es für alle Buchstaben a, ..., z

Wie kann ich ein Bash-Skript schreiben, das 'x'-Schleifen durch das Alphabet führt?

Antworten:



39

Dies sollte Ihnen den Einstieg erleichtern:

for letter in {a..z} ; do
  echo $letter
done

19

Hier erfahren Sie, wie Sie das spanische Alphabet mithilfe der verschachtelten Klammererweiterung generieren

for l in {{a..n},ñ,{o..z}}; do echo $l ; done | nl
1  a
 ...
14  n
15  ñ
16  o
...
27  z

Oder einfach

echo -e {{a..n},ñ,{o..z}}"\n" | nl

Wenn Sie das veraltete spanische Alphabet mit 29 Zeichen generieren möchten

echo -e {{a..c},ch,{d..l},ll,{m,n},ñ,{o..z}}"\n" | nl

Ähnliches könnte für das französische oder das deutsche Alphabet erfolgen.


3

Verwenden von rename:

mkdir -p path2/{a..z}
rename 's|path1/([a-z])(.*)|path2/$1/$1$2' path1/{a..z}*

Wenn Sie das führende [az] -Zeichen vom Dateinamen entfernen möchten, lautet das aktualisierte perlexpr:

rename 's|path1/([a-z])(.*)|path2/$1/$2' path1/{a..z}*

2

Auch mit Großbuchstaben

for letter in {{a..z},{A..Z}}; do
  echo $letter
done

1

Diese Frage und die Antworten haben mir teilweise bei meinem Problem geholfen.
Ich musste in Bash über einen Teil des Alphabets lupen.

Obwohl die Erweiterung ausschließlich in Textform erfolgt

Ich habe eine Lösung gefunden: und es noch einfacher gemacht:

START=A
STOP=D
for letter in $(eval echo {$START..$STOP}); do
    echo $letter
done

Was in ... endet:

A
B
C
D

Ich hoffe, es ist hilfreich für jemanden, der nach dem gleichen Problem sucht, das ich lösen musste, und landet auch hier

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.