免费注册 查看新帖 |

Chinaunix

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

文件批量改名问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-04-09 16:37 |只看该作者 |倒序浏览
我一有系列文件,(文件名中间有空格):

Shortcut to ACDSee32.exe.lnk
Shortcut to EXESCOPE.EXE.lnk
Shortcut to FTERM.exe.lnk
Shortcut to FidolookSL.exe.lnk
Shortcut to Foxmail.exe.lnk
Shortcut to GP3.exe.lnk
Shortcut to LeapFTP.exe.lnk
Shortcut to MyIE.exe.lnk

我用如下命令批量改名:

  1. $ for i in `ls | head -100`; do mv "$i" `echo $i | sed 's/Shortcut\ to\ //g'`  ; done
复制代码


可是事与愿违,这里的 $i 打印出来的只是“Shortcut”(只是第一个字段), 而不是那个文件的全名“Shortcut to XXXXXX”,我该怎么办呢?

论坛徽章:
0
2 [报告]
发表于 2003-04-09 18:28 |只看该作者

文件批量改名问题

for i in "`ls Sh* | head -100`"; do
mv "$i" "`echo $i | sed 's/Shortcut\ to\ //g'`"
done

试一试

论坛徽章:
0
3 [报告]
发表于 2003-04-09 19:31 |只看该作者

文件批量改名问题

it doesn't work

论坛徽章:
0
4 [报告]
发表于 2003-04-10 01:02 |只看该作者

文件批量改名问题

...

这样

  1. while read file ; do
  2.     eval mv \'$file\' `echo $file | sed 's/Shortcut\ to\ //g'`
  3. done <<!
  4. `ls *Sh*`
  5. !
复制代码

论坛徽章:
0
5 [报告]
发表于 2003-04-10 10:37 |只看该作者

文件批量改名问题

红袖能不能给我解释一下上你写的脚本呢?

1.难道是 for 语句与 while 读行的方式不同么?
2.eval是什么意思?
2.为什么要\'$file\' 呢?
3. !`ls *Sh*` !不太明白,为啥要用两个惊叹号?

十分谢谢。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
6 [报告]
发表于 2003-04-10 19:40 |只看该作者

文件批量改名问题

试试这样:
  1. for f in Shortcut*; do
  2.   mv "$f" ${f#Shortcut to }
  3. done
复制代码

问题在于空格的特殊含义:参数分隔符/列表元素分隔符。
不过只改名前100个文件没实现。

论坛徽章:
0
7 [报告]
发表于 2003-04-11 11:27 |只看该作者

文件批量改名问题

原帖由 "aquino" 发表:
红袖能不能给我解释一下上你写的脚本呢?

1.难道是 for 语句与 while 读行的方式不同么?
2.eval是什么意思?
2.为什么要\'$file\' 呢?
3. !`ls *Sh*` !不太明白,为啥要用两个惊叹号?应该这么看吧
<<!`ls *Sh*` !------ here doc 吗! 8-)


十分谢谢。



红袖JJ给解释一下eval吧?

论坛徽章:
0
8 [报告]
发表于 2003-04-11 13:55 |只看该作者

文件批量改名问题

http://www.chinaunix.net/bbsjh/11/896.html

论坛徽章:
0
9 [报告]
发表于 2003-04-15 09:26 |只看该作者

文件批量改名问题

解释 : 关于两个"!"  ---- 即时文档

   从一个SHELL脚本程序向一条命令传送输入数据有一个特殊的办法,就是使用一个即时文档(here文档)。 允许命令在执行的时候就好像在读一个文件或键盘的输入一样,而实际上是从脚本程序里得到输入的数据 。
   即时文档的开始是两个连续的小于号“<<” ,然后是一个特殊的字符序列,该序列将文档的结尾处再次出现。 “<<” 是SHELL中起追加作用的重定向操作符,在脚本程序里表示命令的输入是一个即时文档。而特殊字符序列则用来告诉SHELL即时文档在什么地方结束 。特殊的字符序列不能出现在准备传给命令的文档内容里,所以要尽量使它既容易记忆又足够不寻常。

sample :

#!/bin/sh

cat << !FUFU!
hello
this is a here
document
!FUFU!

执行的结果是:
hello
this is a here
document

论坛徽章:
0
10 [报告]
发表于 2003-04-26 20:26 |只看该作者

文件批量改名问题

原帖由 "aquino" 发表:

可是事与愿违,这里的 $i 打印出来的只是“Shortcut”(只是第一个字段), 而不是那个文件的全名“Shortcut to XXXXXX”,我该怎么办呢?


又学了一招:
#ls | sort | awk '{print "mv \"" $0 "\" \"" $0 "\""}' | sed s/Shortcut\ to\ //2 | sh
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP