LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1136|回复: 4

批量修改文件名

[复制链接]
发表于 2007-8-11 15:03:14 | 显示全部楼层 |阅读模式
我想把当前目录下的文件名都改成1,2,3......
如果用tr 命令转换
但又要长度匹配
有什么更好的办法吗
 楼主| 发表于 2007-8-11 15:39:04 | 显示全部楼层
用sed好象也可以实现替换
但字符都是特定的
不是1,2,3......按顺序来的
回复 支持 反对

使用道具 举报

发表于 2007-8-12 08:39:18 | 显示全部楼层
i=1;for file in $(find -maxdepth 1 -type f ) ; do mv $file $i ; i=$(($i+1)); done
思路:
find -maxdepth 1 -type f  列表当前目录下的所有文件
用i变量来保存序号(从前到后)
mv $file $i  把文件名变换为i
i=$(($i+1)) 递增i变量
for file in .... ; do ...... ; done  依次处理列表中的文件


运行环境:
debian testing
GNU bash, version 3.1.17(1)-release (i486-pc-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-8-12 16:37:49 | 显示全部楼层
十分感谢
我的是i=1;for fname in *;do if [ -f $fname ];then return 1;else mv $fname $i;
i=`expr $i + 1`;done也实现了该功能
我现在想实现另外一个:递归实现所有目录下的多级目录都改成那样的格式
我用的是:
j=1;m=1
rename(){while [ -d $j ](判断可能会不存在的目录10,11是否存在);do cd $j;调用上面那个;j=`expr $j + 1`;done(循环翻开目录,实现改名);if [ -d $m ];then cd $m;
m=`expr $m + 1`;fi;rename $m}
当我变换初始化变量 i , j , m的位置时,实现了所有1下面目录的更改,但2,3.....下面的没变化,我想已经是我递归用错了,请指教一二,不盛感激。
可能我编程真的没脑子,总是编不好,实在是笨
回复 支持 反对

使用道具 举报

发表于 2007-8-14 18:00:09 | 显示全部楼层
for dir in `find 初始目录 -type d`
do
   i=1
   for file in `find $dir -maxdepth 1 -type f`
   do
      mv $file ${dir}/$i
      i=$(($i + 1 ))
   done
done

上面的代码是把  初始目录  下的所有目录及子目录下的文件都修改成1,2,3......这样的文件名
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表