Shell-如何通过shell移动全部文件?

服务器管理 服务器管理 主题:1035 回复:2217

Shell-如何通过shell移动全部文件?

浮生未歇 发布于 2017-05-23 字数 267 浏览 1081 回复 2

在一个文件夹下有几个子文件夹:
AAA aaaa bbb BBB ccc CCC ddd DDD EEE eeee FFF ffff

我的shell脚本如下:

#!/bin/bash
mv ./[a-b]* ../temp2/
sleep 10
mv ./[c-d]* ../temp2/
sleep 10
mv ./[e-f]* ../temp2/
sleep 10

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(2

夜无邪 2017-10-05 2 楼

全部转移:

 #!/bin/bash
mv ./[aAbB] ../temp2/
sleep 10
mv ./[cCdD]
../temp2/
sleep 10
mv ./[eEfF]* ../temp2/
sleep 10

只转移大写开头:

 #!/bin/bash
mv ./[AB] ../temp2/
sleep 10
mv ./[CD]
../temp2/
sleep 10
mv ./[EF]* ../temp2/
sleep 10

如果只想转小写,大写字母换成小写

归属感 2017-07-30 1 楼

首先你要明白一个道理 你那是通配符 不是正则表达式
在shell中 排序和本地环境变量有关系
比如你 ls [a-b]* 你会发现他是按照aAb 的顺序来的 但不包括B
具体影响这个结果的变量 你可以用locale查看一下 这里有一个很重要的的值 LC_COLLATE
引用一段话:
The sorting order of characters in range expressions is determined by the current locale and the value of the LC_COLLATE shell variable, if set.
具体查看这里 传送门

所以你的问题也很好理解了 为什么会移动其他大写的文件 而不包括最后一个大写字母开头的文件

ps:如果你将LC_COLLATE的值设为C的话 那么就是按照ascii码排序 也就满足你的要求了 用[a-c]*不会移动大写文件了