当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 1 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 发个自己写的重命名脚本--支持正则表达式
帖子发表于 : 2008-10-17 17:40 
头像

注册: 2007-07-05 2:48
帖子: 171
送出感谢: 0 次
接收感谢: 0 次
本来系统中有不少重命名的程序, 不过都用起来不太顺手
有一个倒是挺好,支持正则表达式,可是却偏偏正则表达式的向前引用功能有问题
为此目的,特地写了一个脚本

只支持正则表达式(通过sed, 所以以sed的正则表达式为准)方式的重命名
当然, 支持向前引用了.

使用方法:

myrename 's/pattern1/pattern2/' files

把patter1替换为pattern2, 完全以sed的处理方式为准

例如:
附件:
shot.png
shot.png [ 7.38 KiB | 被浏览 539 次 ]


真正替换前会告诉你要做如何的替换,然后然你确认是否真的重命名.

http://goodluck1982.blog.sohu.com/93457042.html

引用:
#!/bin/bash -f
#重命名脚本,主要是实现正则表达式的向前引用
# goodluck_1982@163.com
# ---2008-09-21 18:50:39---: 对每个单引号都要处理 sed 's/../../g'

(
tmp=.__$(date +%s)__tmp
tmp2=.__$(date +%s)__tmp2
tmp3=.__$(date +%s)__tmp3
s="$1"
shift 1
if [ "${s:0:1}" != 's' ]; then
echo
echo "Usage: myrename 's/<PATTERN1>/<PATTERN2>/[<modifier>]' filelist"
echo " Regular expressions used here is the same as that in sed."
echo
exit
fi
ls -1d "$@" >$tmp #产生文件名列表,注意处理目录 -d
sed "$s" $tmp >$tmp2 #根据"$s"中指定的替换规则用sed进行替换
if [ $? -ne 0 ] ; then #替代序列格式不对时则退出脚本
echo
echo " The string for substitue 's/<PATTERN1>/<PATTERN2>/[<modifier>]' has error!"
echo
exit
fi
sed -i "s/'/'\\\''/g" $tmp #处理文件名中含有单引号的特殊情况,每一个单引号都要处理
sed -i "s/'/'\\\''/g" $tmp2 #处理文件名中含有单引号的特殊情况
sed -i "s/.*/'&'/" $tmp #给文件名两边加上单引号
sed -i "s/.*/'&'/" $tmp2 #给文件名两边加上单引号
p=$(diff $tmp $tmp2 | grep '^[0-9]\+\(,[0-9]\+\)\?c[0-9]\+\(,[0-9]\+\)\?' | sed 's/c.*/p;/' | xargs) #找出有变化的文件名
sed -n -i "$p" $tmp #去掉没有变化的文件名
sed -n -i "$p" $tmp2 #去掉没有变化的文件名
paste -d ' ' $tmp $tmp2 > $tmp3
sed -i 's/^/mv /' $tmp3 #产生重命名用的脚本
sed -i 's/\(.*\)/ ==> &/' $tmp2 #为了显示好看,给变化后的文件名加上红色
echo
echo "List for files to be renamed:"
echo
paste -d ' ' $tmp $tmp2
echo
echo "Do you want to rename, y/n ?"
read yn
if [ "$yn" == "y" ]; then
. ./$tmp3
echo
echo " Files are renamed successfully!"
echo
else
echo
echo " Nothing done!"
echo
fi
\rm -f $tmp $tmp2 $tmp3
)


附件:
myrename.gz [1.02 KiB]
被下载 29 次
页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 1 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译