Bash脚本循环通过字母表

我想将所有以'x'开始的文件都mv到目录'x'; 就像是:

 mv path1/x*.ext path2/x 

并为所有的字母表a,…,z做

我怎样才能写一个bash脚本,使string循环“x”?

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

这应该让你开始:

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

这里是如何使用嵌套括号扩展来生成西class牙字母表

 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个字符西class牙字母表

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

类似的可以做法语字母或德语字母。

使用rename

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

如果你想剥离文件名前面的[az]字符,更新后的perlexpr将是:

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