设为首页 收藏本站
查看: 993|回复: 0

shell学习与使用,边学边用之六!(文件批量复制更名))

[复制链接]

尚未签到

发表于 2017-5-16 09:44:49 | 显示全部楼层 |阅读模式
在我学习python的时候,我将在ipython中测试的过程通过gnome-screenshot截屏下来保存。
一开始我命名的规则如下:
引用

banxi1988@banxi:~/work/python$ ls images/
assign_py16.png           class_private_var_py06.png     instance_init_py08.png
class_attribute_py02.png  dict_create_py14.png           issubclass_py01.png
class_attribute_py03.png  div_int_py17.png               multiline_str_py12.png
class_attribute_py04.png  factory_function_py09.png      singleton_new_py10.png
class_attribute_py05.png  getattr_frominstance_py11.png  True_False_py15.png
class_docstring_py07.png  inOrnotin_slicing_py18.png     tuple_py13.png
banxi1988@banxi:~/work/python$


后面有一个共同的规则就是pyXX.png这样的。
但是这样在文件查找的时候,序号并不容易清楚的看出来。
所以我想把文件名改为pyxx_some_some.png的方式
如class_attribute_py02.png变为py02_class_attribute.png
为了方便些项操作。
我写了个脚本,通过将这个文件复制到一个新目录时将用新名称命名。
如下
cp dir/fileName newDir/newFileName
基本完成后的脚本如下:
注意是在当前路径执行的。

banxi1988@banxi:~/work/python$ cat fileNameArrange.sh
#!/bin/bash
# move with name new arrange
#set -x
path='/home/banxi1988/work/python/';
srcdir="images_test/"
dstdir="images_dst/"
if [ ! -d "$srcdir" ]
then
echo "images_test目录不存在"
exit 1
fi
if [ -d "$dstdir" ]
then
echo -n "$dstdir 已经存在,是否需要删除(y/n)?";
read reply
reply=`echo $reply | tr [a-z] [A-Z]`
if [ $reply = Y ]
then
echo "正在删除目标目录...";
rmdir "$dstdir";
echo "$dstdir目录已经删除!";
echo "正在创建新目标目录 $dstdir...";
mkdir "$dstdir";
echo "$dstdir目录创建成功!";
else
echo "您选择了不删除目标目录!"
fi
fi
# traverse file in srcdir
#set -x
for file in $(ls $srcdir)
do
#echo "文件:$file"
fileSuffix=`echo $file| gawk --posix '{ print substr($1,match($1,/py[0-9]{2}/),(length($1) - 4))}'`
filePrefix=`echo $fileSuffix|gawk '{print substr($1,0,match($1,/\./)-1)}'`
fileName=`echo $file|gawk --posix '{print substr($1,0,match($1,/py[0-9]{2}/)-2)}'`
newFileName="${filePrefix}_$fileName.png"
#echo "newFileName:$newFileName"
#set -x
cp "$srcdir$file"  "$dstdir$newFileName"
#set +x
done


脚本文件分析:
一:
文件目录的存在性判断用在if语句中用的参数。

if [ -d "$dstdir" ] :如果目录存在。
和if [ ! -d "$dstdir" ] :如果目录不存在。
其他可用参数及说明如下:
引用

-w file     用户可写为真
-x file     用户可执行为真
-f file     文件为正规文件为真
-d file     文件为目录为真
-c file     文件为字符特殊文件为真
-b file     文件为块特殊文件为真
-s file     文件大小非0时为真
-t file     当文件描述符(默认为1)指定的设备为终端时为真


二:
文件目录下文件的遍历:

for file in $(ls $srcdir)
do
## do some thing
done

有一点是利用了ls命令的功能。
然后是for in语句。

三:字符串抽取与重组

## file=class_attribute_py18.png
fileSuffix=`echo $file| gawk --posix '{ print substr($1,match($1,/py[0-9]{2}/),(length($1) - 4))}'` ## fileSuffix = py18.png
filePrefix=`echo $fileSuffix|gawk '{print substr($1,0,match($1,/\./)-1)}'`
## filePrefix = py18
fileName=`echo $file|gawk --posix '{print substr($1,0,match($1,/py[0-9]{2}/)-2)}'`
## fileName=class_attribute
newFileName="${filePrefix}_$fileName.png"
## newFileName=py18_class_attribute.png


上面的的file变量值在注释中的值情况下:
各行代码执行之后对应变量赋值结果如相应后面的注释中的对应所示:
首先在抽取filePrefix提取时。因为提取fileSuffix中gawk中的match提取中的(length($1)-4)没有作用。所以 就多用了一次,因为从前面提取是有用的。
然后awk默认是不支持{}的正则的。所以要开启--posix或者--re-internal选项才可以。
在使用变量时除了$varName的这种方法之处,还可以使用${varName}这种方式。
上面的情况下第一个filePrefix变量必须使用后一种方式。
上面还使用了awk的内置的两个函数。substr()和match()
============未完待续=================

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-377970-1-1.html 上篇帖子: (转)Bash shell中的位置参数$#,$*,$@,$0,$1,$2…及特殊参数$?,$-等的含义 下篇帖子: 【Tiptop ERP T】Tiptop GP與系統部署有關的Shell rebuild解析
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表