linux find 批量改名,linux使用find 批量重命名文件

今天单位系统部署新版本内容,看似一切风平浪静,两个小时候快要接近尾声时却发生了一件很恶心的事。

由于我的系统在上线新功能后需要由上游系统提供一些初始化文件过来供我的系统进行数据库的原始功能初始化操作,但上游的管理员一时的大意将传输过来的大批量的文件名统统少了一位,这是最让人抓狂的事。如果数据量小的话还可以手工来逐个目录进去修改名字。但上万条的文件名看着就眼晕,无奈之下只能自己写个脚本给他们善后吧,话不多说上脚本。示例:目录结构:

/tmp/file/input/baidu/image/{jpg,gif}/20190823/SINA_SAFEID_CN0110000_ACUP_INIT_20190823_2130.dat(就是示例目录,不用纠结内容o(╯□╰)o)

vim renameFile.sh

#!/bin/bash

DIRPATH="/tmp/file/input/baidu/image/{jpg,gif}/20190823/*"

for file in $(find $(eval ls $DIRPATH));do

DIR=$(dirname $file)

cd $DIR

OLDNAME=$(basename $file)

NEWNAME=$(echo $OLDNAME |sed 's/CN011000*/CN0110000/g')

if [ "$OLDNAME" == "$NEWNAME" ];then

echo "已经重命名,无需改动!"

else

echo "old ! = new"

mv $OLDNAME $NEWNAME 2>/dev/null

[ $? -eq 0 ] && echo "重命名成功!" || echo "重命名失败!"

fi

done

吐槽一下:原以为只是使用一个find 加sed命令即可解决问题,没想到还是踩了一些坑,也算是自己的基础知识点不够吧,在这记录一下给自己提个醒,正常情况下find命令查找文件或目录时所给的路径一般为字符串,如果需要使用变量的方式来传递要查找路径,直接使用$ARGS方式则会有无法找到路径的错误提示,这是因为变量中涉及到的大括号无法展开为真实路径而导致报错,此时则需要eval命令来解决这个问题,eval可以将得到的结果进行解析,如果得到的还是一个命令,则会将该命令所获得的结果作为最终结果输出。

标签:重命名,echo,OLDNAME,file,linux,find,20190823

来源: https://blog.51cto.com/goodjoe/2432341

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值