Shell 编程中处理带有空格的文件名的小 trick
2013-04-28 13:56
525 查看
昨天晚上终于把论坛上那个16本Python书的帖子里的书下载完了,发现有好几本书名前都有一个 [搬书匠#123] 这样格式的前缀,而且有几个文档还莫名其妙的有运行权限,于是我决定写个脚本清理一下,其实是套用一下之前的一个脚本(把1.abc.mp3改成01.mp3以自动排序):
点击(此处)折叠或打开
#!/bin/sh
#
# Description:
# if there is a file with name: [1-9].xxx, it will be changed into 0[1-9].xxx
for var in `ls`;
do
new=`echo $var | sed "s/^\([1-9]\)\./0\1\./g"`
if [ $var != $new ];then
mv $var $new
fi
done
之前这个脚本运行很正常,我打算直接把 sed 后面的正则表达式改一改就搞定,结果改了之后刷出来一堆错误信息,说 Can't stat file "xxx", 而 xxx 文件只是正确文件名中的一段,我如梦初醒,原来是文件名中有空格,ls 返回的 list 被 for 错误地逐词识别了,这下囧了,源文件空格满满的啊,难怪 Unix Haters' Handbook 把文件名中有空格的问题批得一无是处。
经过一番 google 总算是找到了答案,一个很巧妙的手法,只是把第六行改成了: ls * | while read var. 这其中的道理学过 Shell 的都看得懂,可是想出来可就不容易了。于是兴冲冲地重写了这个脚本,结果如下:
点击(此处)折叠或打开
#!/bin/sh
ls * | while read var
do
if [ -x "$var" ]; then
chmod a-x "$var"
fi
new=`echo "$var" | sed "s/^\[搬书匠[#0-9]*\]\(.*\)$/\1/g"`
if [ $var != $new ];then
mv "$var" "$new"
fi
done
注意这里的变量调用的时候,一定要写为 "$var",如果手一抖写成 $var 就又是一大堆看起来莫名其妙的错误信息了。上面这个脚本运行一切正常。
整个处理过程出现了多次诡异的故障,以至于事实上用的时间比手动修改长多了,不过喜爱编程的同道们都明白,这样的一番折腾实在是一种娱乐,比起一个个改文件名好玩的多。
阅读(213) | 评论(0) | 转发(1) |
0
上一篇:Shell 编程(III)
下一篇:Shell 编程中的 echo 和 printf
相关热门文章
linux 常见服务端口
什么是shell
linux socket的bug??
linux的线程是否受到了保护?...
一个适用于windows和linux的抓...
linux源码分析1---启动分析2...
zabbix_proxy 配置实例
使用AWK进行数据文件的检测...
批量管理Linux系统服务...
linux内核API每天来一发(4)...
给主人留下些什么吧!~~
评论热议
点击(此处)折叠或打开
#!/bin/sh
#
# Description:
# if there is a file with name: [1-9].xxx, it will be changed into 0[1-9].xxx
for var in `ls`;
do
new=`echo $var | sed "s/^\([1-9]\)\./0\1\./g"`
if [ $var != $new ];then
mv $var $new
fi
done
之前这个脚本运行很正常,我打算直接把 sed 后面的正则表达式改一改就搞定,结果改了之后刷出来一堆错误信息,说 Can't stat file "xxx", 而 xxx 文件只是正确文件名中的一段,我如梦初醒,原来是文件名中有空格,ls 返回的 list 被 for 错误地逐词识别了,这下囧了,源文件空格满满的啊,难怪 Unix Haters' Handbook 把文件名中有空格的问题批得一无是处。
经过一番 google 总算是找到了答案,一个很巧妙的手法,只是把第六行改成了: ls * | while read var. 这其中的道理学过 Shell 的都看得懂,可是想出来可就不容易了。于是兴冲冲地重写了这个脚本,结果如下:
点击(此处)折叠或打开
#!/bin/sh
ls * | while read var
do
if [ -x "$var" ]; then
chmod a-x "$var"
fi
new=`echo "$var" | sed "s/^\[搬书匠[#0-9]*\]\(.*\)$/\1/g"`
if [ $var != $new ];then
mv "$var" "$new"
fi
done
注意这里的变量调用的时候,一定要写为 "$var",如果手一抖写成 $var 就又是一大堆看起来莫名其妙的错误信息了。上面这个脚本运行一切正常。
整个处理过程出现了多次诡异的故障,以至于事实上用的时间比手动修改长多了,不过喜爱编程的同道们都明白,这样的一番折腾实在是一种娱乐,比起一个个改文件名好玩的多。
阅读(213) | 评论(0) | 转发(1) |
0
上一篇:Shell 编程(III)
下一篇:Shell 编程中的 echo 和 printf
相关热门文章
linux 常见服务端口
什么是shell
linux socket的bug??
linux的线程是否受到了保护?...
一个适用于windows和linux的抓...
linux源码分析1---启动分析2...
zabbix_proxy 配置实例
使用AWK进行数据文件的检测...
批量管理Linux系统服务...
linux内核API每天来一发(4)...
给主人留下些什么吧!~~
评论热议
相关文章推荐
- Shell中处理包含空格的文件名实例
- Shell 处理文件名中包含空格的文件
- Shell中处理包含空格的文件名实例
- Shell处理带空格的文件名的方法
- SHELL技巧:处理文件名中的那些空格
- Shell处理带空格的文件名的方法
- Bash循环处理带有空格的文件名
- SHELL技巧:处理文件名中的那些空格
- java下载文件名中带有中文字符乱码的处理
- 【Shell脚本】逐行处理文本文件 && 空格变换行
- 用xargs处理带空格文件名
- Shell脚本编程——字符串变量处理
- shell脚本编程 逐行处理文本 将字符串转化为数组
- Windows路径含有带空格的目录/文件名的处理
- DOS命令中文件名带空格的处理方法
- java执行shell命令中有空格的处理方法
- Shell(Bash)编程实例之获取某个文件夹下的所有文件名(含文件夹)
- shell 编程中空格的使用
- cmd文件名空格处理
- Shell(Bash)编程实例之获取某个文件夹下的所有文件名(含文件夹)