当前位置:  技术问答>linux和unix

求一个批量重命名文件的shell程序

    来源: 互联网  发布时间:2016-02-15

    本文导语:  有一个文件夹,下面有100个文件,我想以1~100来命名这100文件,如何实现? | A=1; for i in *; do echo $i; mv $i $A; A=`expr $A + 1`; done | [code=BatchFile]~/bin/junk>A=1; for i in *; do echo $i;...


有一个文件夹,下面有100个文件,我想以1~100来命名这100文件,如何实现?

|
A=1; for i in *; do echo $i; mv $i $A; A=`expr $A + 1`; done

|
[code=BatchFile]~/bin/junk>A=1; for i in *; do echo $i; mv $i $A; A=`expr $A + 1 `; done[/code]

~/bin/junk>ls
total 12
4 ./  4 ../  4 file1  0 file2  0 file3  0 file4
~/bin/junk>A=1; for i in *; do echo $i; mv $i $A; A=`expr $A + 1 `; done
file1
file2
file3
file4
~/bin/junk>ls
total 12
4 ./  4 ../  4 1  0 2  0 3  0 4

|
    如果你使用的是windows XP操作系统的话,要想批量重命名就很简单了。第一步:首先按自己的希望调整好文件顺序。第二步:全选所有文件,在第一个文件上击右键,重命名该文件(注意不要修改扩展名),如改为“tu(1).jpg”(注意:tu后面的括号和数字一定要在英文状态下输入),然后按回车,等一会就会全部重命名完毕。第一个文件为tu(1).jpg,第二个为tu(2).jpg,第三个为tu(3).jpg……以此类推。用这种方法同样可以批量重命名文件夹。

|
directory=test2/
num=1
ls $directory|while read name
do
mv $directory$name $directory$num
num=` expr $num + 1 `
done

|
#!/bin/bash

mydir=~/tmpdir/
num=1
for i in `ls ~/tmpdir`
do
mv $mydir$i $mydir$num
num=`expr $num + 1`
done

|
上面很多人都给出答案了。ptf_phoenix的方式更标准一些。但是我觉得在 目录名和文件名之间也要有'/'.
因为如果目录名不以'/'结尾那么$directory$name这种写法就行不通。而/usr//local和/usr/local是一样的。
可以在ls的参数中指定排序方式。

另外借lz此贴,我顺便寻求一个批量改扩展名的shell脚本,lz不会介意吧?
如/home/name/doc下面有
a.asp b.asp aa.bb.asp ...
分别改成
a.html b.html aa.bb.html ...
怎么改?越简单越好。想了很久总是觉得麻烦。

windows XP批量重命名能满足这些特殊要求吗?

|
to tpfly, 一个可考虑的方法:

cd /home/name/doc && for i in *asp;do mv $i `echo $i | sed 's/.asp/.html/g'`;done

不过如果文件名很复杂,如有a.asp.asp或者其他方式则需要加额外处理

|
嗯,sed是个不错的思路。
如果a.asp.asp我想可以用正则表达式
看来这可能是最简单的做法了。

|
cd /home/name/doc && for i in *asp;do mv $i `echo $i  ¦ sed  's#asp$#html#g '`;done 
可能这样稍微好一些,这样只会匹配最后的那个asp,就是文件名中间有.asp也不会出错了

|
顶,我支持acange的解决方法,是UNIX下的方法,也是最简洁的方法。

|
http://topic.csdn.net/u/20070330/07/182c8cdf-4471-4953-9ad7-733555f4e8fc.html
不太相干,但也是shell

|
*不能匹配隐藏文件如 .hide,*asp也不能匹配 .aa.asp。
如果目录里没有匹配文件那么通配符只能保持原样。例如,如果目录里没有以a开头的文件那么echo a*会是什么结果?它直接输出字符串 a*
还有用ls时也应该注意默认的选项和命令别名。ls -A 列出除. ..之外的文件和目录。如果有隐藏文件用这个。

我的完整程序:
#!/bin/bash
if [ "$2" = "" ]
then
exit 1
fi
OLD_EX=".$1"
NEW_EX=".$2"
if [ "$1" = "@" ]
then
OLD_EX=""
fi
if [ "$2" = "@" ]
then
NEW_EX=""
fi

for i in `ls -A | grep $OLD_EX$`
do
mv $i `echo $i | sed "s/$OLD_EX$/$NEW_EX/g"` 
done
#end of file

把当前目录所有文件扩展名由参数1改成参数2,@表示空扩展名,即可以添加或去掉扩展名。

|
之所以想到这个题目,因为曾经有一个小说网站,用flashget批量下载它的小说页面之后全都被保存成了asp的文件,用ie一打开都显示的是html源码,只有在看每一章之前手动把扩展名改成html才正常显示。真的很烦。当时费了九牛二虎之力也没有找到简单的办法(当时还没接触linux),windowsXP图形界面根本满足不了这种需求。
所以这件事给我印象颇深,图形界面在有些时候也不是那么好用的,图形与文本各有千秋。

|
expr $NEWNAME + 1 三个参数中间都应有空格。
for ONENAME in "$MYFILES"
应该写成for ONENAME in $MYFILES
否则"$MYFILES"会被当成整体。

不知道哪里出错的BASH程序可以用命令
bash -x scriptfilename options
调试。

|
if [ -f "$NEWNAME$SUFIX" ]
该是 if [ -f "$MYPATH/$NEWNAME$SUFIX" ]

|
lz可以结帖了。

|
SF

    
 
 

您可能感兴趣的文章:

  • java文件重命名(文件批量重命名)实例程序代码分享
  • 在VC下如果要打开其它语言命名的文件读行二进制读取可以用TCHAR来定义文件名,读写函数他自己会自动选择,现在要换到LINUX下(UBUNTU)下开发,如果有多种语言命名的文件,我应该用什么类型来存放文件名?
  • 请问如何动态命名重定向输出文件名,并将内容输出到该文件?
  • 文件重命名的两种方式的区别
  • 紧急求助:Unix下给文件夹重命名用什么命令?谢谢!!!!
  • unix系统可以实现对文件的重命名吗?
  • 在UNIX下怎么进行文件的批量命名???
  • 求助 shell中split命令如何实现文件分割 并统计分割文件个数。分割完之后,命名方式从 文件名.001 开始
  • linux内核态下怎么重命名文件?求解
  • UNIX下用custom安装程序Media Device选择Media images时硬盘镜像文件如何命名
  • 怎样编写一个Shell,把当前目录下的所有文件都重新命名
  • 文件重命名的问题
  • php 创建以UNIX时间戳命名的文件夹(示例代码)
  • 一个小问题,如何简便的重命名目录下的所有某类文件
  • 求助,shell中文件cp时自动重命名问题
  • Linux 下 java 的File类的renameTo()方法 不能重命名文件
  • wget下载文件后会自动重命名?
  • 用python实现批量重命名文件的代码
  • Linux使用mv命令重命名时,新文件名已存在,会把原来的覆盖掉,却不问用户,怎么解决?
  • php 创建以unix时间戳命名的文件夹
  • c# 命名空间和程序集
  • c# 命名空间与程序集的相关概念
  • PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
  • 求命名管道FIFO编写两个程序,实现通信,简单聊天功能。
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.naming类namingexception的类成员方法: getrootcause定义及介绍
  • 大家讨论一下Linux的命名规则
  • java命名空间javax.xml.soap接口name成员方法: getqualifiedname定义参考
  • 请问何时删除命名管道哪?
  • java命名空间javax.naming.event类namingevent的类成员方法: object_renamed定义及介绍
  • 批量重命名工具 Krename
  • java命名空间javax.naming接口context的类成员方法: getnameparser定义及介绍
  • 操作系统 iis7站长之家
  • java命名空间javax.naming.directory类searchcontrols的类成员方法: subtree_scope定义及介绍
  • solaris 安装 命名服务
  • java命名空间javax.swing类jtextpane的类成员方法: addstyle定义及介绍
  • 搞不懂TI的demo的线程命名,请教
  • java命名空间javax.naming接口namingenumeration<t>的类成员方法: hasmore定义及介绍
  • 如何批量重命名
  • java命名空间javax.swing.text接口styleddocument的类成员方法: addstyle定义及介绍
  • 日志写入命名管道的权限问题
  • java命名空间javax.swing.text类stylecontext的类成员方法: addstyle定义及介绍
  • 命名管道问题
  • java命名空间javax.swing.text类styleconstants的类成员方法: nameattribute定义及介绍
  • UINX C++ 命名空间问题
  • java命名空间javax.xml.soap接口name成员方法: geturi定义参考
  • java 命名空间 命名规则第1/2页


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3