2011-06-14 42 views
0

我有一组文件(ABC.AM.*.*.20*.*)的文件夹重命名文件名以正则表达式

例如为:ABC.AM.00.13.201106.00014中,我需要这个重命名为ABC.AM.00.13.201106.01014。我在AIX中,所以rename命令不可用。

只是一个伪脚本

for i in `ls ABC.AM.*.*.20*.*` 
do 
     mv $i DESIRED_file_name 
done 

任何帮助将是非常赞赏

+0

我敢肯定更名是开源的,并可能会建立就好上AIX。 – 2011-06-14 11:10:18

+0

@William Pursell嗯,我不应该这样做..有没有什么工作? – nachikethas 2011-06-14 11:13:46

+0

“不应该这样做”是什么意思?你的意思是你不能把它安装在/ usr/bin中?如果您的主目录具有写入权限,则始终可以尝试--prefix = $ HOME并在此处安装。 (但我不打扰:通过重命名提供的功能很容易用简单的shell脚本获得) – 2011-06-14 11:17:12

回答

2

试试这个:

for arg in ABC.AM.*.*.20*.* 
do 
    newarg="$(echo "$arg" | sed 's/\(.*\..\)0\(.*\)/\11\2/')" 
    if [ "$newarg" != "" ];then 
    mv "$arg" "$newarg" 
    fi 
done 
+0

为什么要丢弃错误?如果文件没有被移动,用户肯定会想看到错误信息。 – 2011-06-14 11:27:37

+0

@威廉:好的。我删除它。 – 2011-06-14 11:28:47

+0

谢谢@约翰..真的很有帮助:) – nachikethas 2011-06-14 11:48:21

0

这不完全清楚的更换是什么,你想,但你给特定的例子,你可以做:

 
for ...; do 
    mv $i ${i/00014/01014} 
done 

对于这样的事情的一种常用方法是使用sed来生成新的文件名:

 
for old_name in ...; do 
    new_name=$(echo $old_name | sed -e '...') 
    mv $old_name $new_name 
done 

当做这样的事情时,最好用'echo'替换'mv'并确保你有你想要的替换,然后使用'mv'重新运行该命令。

在你的情况,你可能会想使用类似:

 
sed -e 's/000\([0-9]\{2\}\)$/010\1/' 
+0

感谢您的回复.. 我只想在第二位置用1替换零位 例如00014/01014 00015/01015 00004/01004 – nachikethas 2011-06-14 11:17:04

+0

谢谢@William – nachikethas 2011-06-14 11:48:51