免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4828 | 回复: 9
打印 上一主题 下一主题

批量文件名替换 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-07 07:37 |只看该作者 |倒序浏览
10可用积分
请教一下论坛的专家,我在SUSE里面每天产生一批LOG文件,文件名格式是YYYY_MM_DD_NE:XX.INV.DHL,打算每天用FTP把LOG文件拷贝到WINDOWS2008的服务器中,但是WINDOWS文件名不能使用冒号‘:’,在某些情况下冒号会被自动替换为下划线_,但是有时又不会被替换,如果解决这个问题最好的还是把源文件名改掉。我试着用MV,rename都没有成功,因为文件名是动态生成的,想请教下大家,怎样用简单的命令行或者SCRIPT来修改YYYY_MM_DD_NE:XX.INV.DHL成YYYY_MM_DD_NE_XX.INV.DHL.

谢谢大家!

最佳答案

论坛徽章:
9
2015亚冠之阿尔纳斯尔
日期:2015-09-10 16:21:162015亚冠之塔什干火车头
日期:2015-07-01 16:23:022015年亚洲杯之巴勒斯坦
日期:2015-04-20 17:19:46子鼠
日期:2014-11-13 09:51:26未羊
日期:2014-08-28 18:13:36技术图书徽章
日期:2014-02-21 09:30:15酉鸡
日期:2014-01-14 11:12:49天蝎座
日期:2013-12-09 17:56:53平安夜徽章
日期:2015-12-26 00:06:30
2 [报告]
发表于 2011-11-07 07:37 |只看该作者
1
  1. rename  :   _   *.DHL
复制代码
2
  1. for i in *.DHL ;do mv "$i"  "`echo "$i" |tr  : _`";done
复制代码

论坛徽章:
1
天秤座
日期:2013-10-23 13:20:42
3 [报告]
发表于 2011-11-07 10:55 |只看该作者
1.awk
ls -l /home/monitor/|grep -v total|awk '{print $9}'|awk -F: '{print "mv " $1":"$2" "$1"_"$2}'|bash

2.sed
ls -l /home/monitor/|grep -v total|awk '{print $9}'|sed 's/\(^[^:]*\):\(.*$\)/mv \1:\2 \1_\2/'|bash

/home/monitor/换成你那些日志所在目录,如果放在脚本中,记住加上必要的系统环境变量

论坛徽章:
0
4 [报告]
发表于 2011-11-07 13:20 |只看该作者
多谢大家,我测试一下回来就给大家加分

论坛徽章:
0
5 [报告]
发表于 2011-11-07 14:44 |只看该作者
提示: 该帖被管理员或版主屏蔽

论坛徽章:
0
6 [报告]
发表于 2011-11-07 15:20 |只看该作者
原来就是最简单的 rename : _ *.DHL

多谢HH106!!!

也多谢jerryjzm,你的命令我试了试提示can not stat ':': No such file or direcotry, 不知道是不是我抄错了什么字符,不过你的两个办法也应该都是可行的,我晚点再试试。

谢谢大家的帮助!

论坛徽章:
0
7 [报告]
发表于 2011-11-07 15:21 |只看该作者
本帖最后由 mnemonic 于 2011-11-07 15:30 编辑

发重了

论坛徽章:
1
天秤座
日期:2013-10-23 13:20:42
8 [报告]
发表于 2011-11-07 16:31 |只看该作者
回复 6# mnemonic


我应该建议你
cd到你的日志目录,再执行

论坛徽章:
0
9 [报告]
发表于 2011-11-07 16:57 |只看该作者
回复  mnemonic


我应该建议你
cd到你的日志目录,再执行
jerryjzm 发表于 2011-11-07 16:31



谢谢提醒,我就是这么做的,不过还是有错误提示,我试过第二条命令没问题,但是不知道为什么文件名还是没有改

不过还是非常感谢你的帮助,我再看看帮助文档吧。

论坛徽章:
1
天秤座
日期:2013-10-23 13:20:42
10 [报告]
发表于 2011-11-07 17:20 |只看该作者
我是亲自测试了的,
我怀疑有几个问题



1.awk
ls -l /home/monitor/|grep -v total|awk '{print $9}'|awk -F: '{print "mv " $1":"$2" "$1"_"$2}'|bash

2.sed
ls -l /home/monitor/|grep -v total|awk '{print $9}'|sed 's/\(^[^:]*\):\(.*$\)/mv \1:\2 \1_\2/'|bash

既然cd到那个目录
/home/monitor/这个就不需要了
还有,这里目录中是否还有其他的目录

ps:
[monitor@mytest ~]$ ls -l
total 0
-rw-rw-r-- 1 monitor monitor 0 Nov  7 10:40 YQYY_MM_DD_RN:XX.INV.DHL
-rw-rw-r-- 1 monitor monitor 0 Nov  7 10:39 YYYY_MM_DD_NN:XX.INV.DHL
-rw-rw-r-- 1 monitor monitor 0 Nov  7 10:40 YYYY_MM_DD_RN:XX.INV.DHL
[monitor@mytest ~]$ ls -l /home/monitor/|grep -v total|awk '{print $9}'|awk -F: '{print "mv " $1":"$2" "$1"_"$2}'|bash
[monitor@mytest ~]$ ls -l
total 0
-rw-rw-r-- 1 monitor monitor 0 Nov  7 10:40 YQYY_MM_DD_RN_XX.INV.DHL
-rw-rw-r-- 1 monitor monitor 0 Nov  7 10:39 YYYY_MM_DD_NN_XX.INV.DHL
-rw-rw-r-- 1 monitor monitor 0 Nov  7 10:40 YYYY_MM_DD_RN_XX.INV.DHL


[monitor@mytest ~]$ ls -l
total 0
-rw-rw-r-- 1 monitor monitor 0 Nov  7 17:19 YQYY_MM_DD_RN:XX.INV.DHL
-rw-rw-r-- 1 monitor monitor 0 Nov  7 17:19 YYYY_MM_DD_NN:XX.INV.DHL
-rw-rw-r-- 1 monitor monitor 0 Nov  7 17:19 YYYY_MM_DD_RN:XX.INV.DHL
[monitor@mytest ~]$ ls -l /home/monitor/|grep -v total|awk '{print $9}'|sed 's/\(^[^:]*\):\(.*$\)/mv \1:\2 \1_\2/'|bash
[monitor@mytest ~]$ ls -l
total 0
-rw-rw-r-- 1 monitor monitor 0 Nov  7 17:19 YQYY_MM_DD_RN_XX.INV.DHL
-rw-rw-r-- 1 monitor monitor 0 Nov  7 17:19 YYYY_MM_DD_NN_XX.INV.DHL
-rw-rw-r-- 1 monitor monitor 0 Nov  7 17:19 YYYY_MM_DD_RN_XX.INV.DHL
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP