在Bash中循环使用字母

时间:2011-09-04 15:04:03

标签: bash

我想mv所有以'x'开头的文件到目录'x';类似的东西:

mv path1/x*.ext path2/x

并为所有字母a,...,z

执行此操作

如何编写一个bash脚本,使'x'循环通过字母表?

6 个答案:

答案 0 :(得分:117)

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

答案 1 :(得分:34)

这应该让你开始:

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

答案 2 :(得分:17)

这里是如何使用嵌套大括号扩展生成西班牙语字母

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

如果您想生成obsolete 29个字符的西班牙语字母

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

可以用法语字母或德语字母表进行类似的操作。

答案 3 :(得分:3)

使用rename

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

如果你想从文件名中删除前导[a-z]字符,更新的perlexpr将是:

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

答案 4 :(得分:1)

还有大写字母

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

答案 5 :(得分:1)

这个问题和答案部分地帮助了我解决问题。
我需要在bash中放大字母的部分

尽管扩展is strictly textual

I found a solution:并使其变得更加简单:

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

这将导致:

A
B
C
D

希望它对寻找我必须解决的相同问题的人有所帮助, 并在这里结束