如何批量修改目录下的文件名

lgcHR 2013-03-11 05:18:26
我在linux下开发,遇到个问题,怎么样才能批量的修改某一目录下的所有文件(为所有文件添加一个NM的前缀,不是目录),上网查了很多资料,大多是本目录下的修改,而不是那种嵌套的目录,即那种递归的目录。现在我的目录嵌套的很深,一个一个修改起来很费劲,哪个大神给一段bash脚本,解决我问题。谢谢了
...全文
176 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qsjt886 2013-03-13
  • 打赏
  • 举报
回复
高手就是高手呀
ljc007 2013-03-12
  • 打赏
  • 举报
回复
for file in `find . -type f`
do
    mv $file `dirname $file`/NM_`basename $file`
done
fdl19881 2013-03-11
  • 打赏
  • 举报
回复
引用 楼主 lgcHR 的回复:
我在linux下开发,遇到个问题,怎么样才能批量的修改某一目录下的所有文件(为所有文件添加一个NM的前缀,不是目录),上网查了很多资料,大多是本目录下的修改,而不是那种嵌套的目录,即那种递归的目录。现在我的目录嵌套的很深,一个一个修改起来很费劲,哪个大神给一段bash脚本,解决我问题。谢谢了
花了点时间帮你写了个..   我也已经测试过了,没问题. 将下面的文件内容保存为chang-name.sh 然后chmod +x change-name.sh 将文件放到目标目录以外的任何地方. ./change-name.sh your_dir即可 注意:只运行一次即可,运行多次就会添加多个NM前缀了.
#!/bin/bash

change_name()
{
	if [ "$#" -eq 1 ]
	then
		return 0
	fi

	until [ "$#" -eq 0 ]
	do
	  	filename=`basename $1`
		filedir=`dirname $1`
		newname="NM$filename"
		echo "change $filedir/$filename to $filedir/$newname ..."
		mv $filedir/$filename $filedir/$newname
		shift
	done
	return 0
}

if [ "$#" -lt 1 ]
then
	usage "`basename $0` <basedir>"
fi

files=`find $1 -type f`
for i in "$files"
do
	change_name $i
done

742

社区成员

发帖
与我相关
我的任务
社区描述
该论坛主要探讨Linux系统在IBM Power平台的安装、部署、应用开发等话题,并为网友们提供自由交流的平台。
社区管理员
  • Power Linux社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧