我有一组文件(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
任何帮助将是非常赞赏
我有一组文件(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
任何帮助将是非常赞赏
试试这个:
for arg in ABC.AM.*.*.20*.*
do
newarg="$(echo "$arg" | sed 's/\(.*\..\)0\(.*\)/\11\2/')"
if [ "$newarg" != "" ];then
mv "$arg" "$newarg"
fi
done
为什么要丢弃错误?如果文件没有被移动,用户肯定会想看到错误信息。 – 2011-06-14 11:27:37
@威廉:好的。我删除它。 – 2011-06-14 11:28:47
谢谢@约翰..真的很有帮助:) – nachikethas 2011-06-14 11:48:21
这不完全清楚的更换是什么,你想,但你给特定的例子,你可以做:
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/'
感谢您的回复.. 我只想在第二位置用1替换零位 例如00014/01014 00015/01015 00004/01004 – nachikethas 2011-06-14 11:17:04
谢谢@William – nachikethas 2011-06-14 11:48:51
我敢肯定更名是开源的,并可能会建立就好上AIX。 – 2011-06-14 11:10:18
@William Pursell嗯,我不应该这样做..有没有什么工作? – nachikethas 2011-06-14 11:13:46
“不应该这样做”是什么意思?你的意思是你不能把它安装在/ usr/bin中?如果您的主目录具有写入权限,则始终可以尝试--prefix = $ HOME并在此处安装。 (但我不打扰:通过重命名提供的功能很容易用简单的shell脚本获得) – 2011-06-14 11:17:12