Bashでアルファベットをループする


82

私がしたいmvディレクトリに「X」「X」で始まるすべてのファイル。何かのようなもの:

mv path1/x*.ext path2/x

そして、すべてのアルファベット文字a、...、zに対してそれを行います

'x'がアルファベットをループするbashスクリプトを作成するにはどうすればよいですか?

回答:


139
for x in {a..z}
do
    echo "$x"
    mkdir -p path2/${x}
    mv path1/${x}*.ext path2/${x}
done

1
4行目と5行目でxを中括弧で囲む理由を教えてください。
Jiaqi Li 2018

それは、ここではなく、よく必要な、それが動作し、パラメータが良く目立ついない;)gnu.org/software/bash/manual/...
カミルDziedzic

1
通常"$x"はそれを目立たせるのに十分でより良い方法です。
WeijunZhou19年

39

これで始められるはずです:

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

20

ネストされたブレース展開を使用してスペイン語のアルファベットを生成する方法は次のとおりです

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

または単に

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

廃止された29文字のスペイン語のアルファベットを生成する場合

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

フランス語のアルファベットまたはドイツ語のアルファベットについても同様のことができます。


3

使用rename

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

ファイル名から先頭の[az]文字を削除する場合、更新されるperlexprは次のようになります。

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


1

この質問と回答は、部分的に私の問題を解決するのに役立ちました。アルファベットの一部をbashルーペする
必要がありました

展開は厳密にテキストですが

私は解決策を見つけました:そしてそれをさらに簡単にしました:

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

その結果:

A
B
C
D

私が解決しなければならなかったのと同じ問題を探している誰かのためにそれが役立つことを願っています、そしてここでも終わります

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.