免费注册 查看新帖 |

Chinaunix

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

如何改后缀名? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-20 11:12 |只看该作者 |倒序浏览
大家好, 在我的linux机器上, 在tmp目录下有20万个小文件以txt结尾, 我想改成xxx结尾,ls 的话, argument list too long。该怎样做好点?

论坛徽章:
0
2 [报告]
发表于 2007-10-20 11:23 |只看该作者

  1. for file in *.txt
  2. do
  3.    mv $file ${file/%.txt/.xxx}
  4. done
复制代码

论坛徽章:
0
3 [报告]
发表于 2007-10-22 01:10 |只看该作者
file=1.txt
mv $file ${file/%.txt//}
mv: accessing `1/': Not a directory

说明它会先把1.txt改为1

怎么和
%x=abcdabcd
%echo ${x/a/b} # 只替换一个
bbcdabcd


得到统一的解释?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2007-10-22 01:11 |只看该作者
  1. rename txt xxxx *.txt
复制代码


没那么多文件测试效率!

论坛徽章:
0
5 [报告]
发表于 2007-10-22 08:55 |只看该作者

回复 #2 springwind426 的帖子

第一种情况:
直接
/home/lee/test#file=file.txt
/home/lee/test#echo ${file/.txt/.bak}
不就行了

第二种情况:
mv $file ${file/%.txt/.xxx}
先截短再附加到末尾

这两种不能统一用
${变量名/待替换子串/替换为字串}
来解释吧

论坛徽章:
0
6 [报告]
发表于 2007-10-22 09:44 |只看该作者
原帖由 chumpd 于 2007-10-22 08:55 发表
第一种情况:
直接
/home/lee/test#file=file.txt
/home/lee/test#echo ${file/.txt/.bak}
不就行了

第二种情况:
mv $file ${file/%.txt/.xxx}
先截短再附加到末尾

这两种不能统一用
${变量名/待替 ...



${file/%.txt/.xxx}

是从字符串的末尾进行替换,/表示替换%.txt是模式,表示只有以.txt结尾的字符串才执行替换操作,这样做以后,会把.txt替换为.xxx

论坛徽章:
0
7 [报告]
发表于 2007-10-22 10:53 |只看该作者
原帖由 寂寞烈火 于 2007-10-22 01:11 发表
rename txt xxxx *.txt

没那么多文件测试效率!


  1. time for i in $(seq -w 1 200000);do touch ${i}.txt;done

  2. real    39m7.970s
  3. user    2m11.428s
  4. sys     34m3.668s

  5. time rename 's/\.txt$/\.xxx/' *.txt
  6. bash: /usr/bin/rename: 参数列表过长

  7. real    0m2.311s
  8. user    0m2.184s
  9. sys     0m0.104s

  10. time for file in *.txt;do mv $file ${file/%.txt/.xxx};done

  11. real    65m6.221s
  12. user    2m55.851s
  13. sys     57m36.992s
复制代码

论坛徽章:
0
8 [报告]
发表于 2007-10-22 17:07 |只看该作者
rename
#注意版本。。。

论坛徽章:
0
9 [报告]
发表于 2007-10-22 19:56 |只看该作者
原帖由 baif 于 2007-10-22 17:07 发表
rename
#注意版本。。。


在我的机器上,rename是一个perl脚本
还有一个rename.ui 是一个二进制文件

  1. time rename.ul .xxx .txt *.xxx
  2. bash: /usr/bin/rename.ul: 参数列表过长

  3. real    0m2.063s
  4. user    0m1.888s
  5. sys     0m0.176s
复制代码


  1. rename.ul --version
  2. rename.ul (util-linux-ng 2.13)
复制代码

[ 本帖最后由 springwind426 于 2007-10-22 19:57 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2007-10-22 21:59 |只看该作者

回复 #6 springwind426 的帖子

找到了,在bash手册里
parameter expansion的内容
http://www.gnu.org/software/bash/manual/bashref.html#SEC29

${parameter//pattern/string}

    If pattern begins with `#', it must match at the beginning of the expanded value of parameter.
If pattern begins with `%', it must match at the end of the expanded value of parameter.
If string is null, matches of pattern are deleted and the / following pattern may be omitted.
If parameter is `@' or `*', the substitution operation is applied to each positional parameter in turn, and the expansion is the resultant list.
If parameter is an array variable subscripted with `@' or `*', the substitution operation is applied to each member of the array in turn, and the expansion is the resultant list
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP