当前位置: 技术问答>linux和unix
linux批量修改文件名shell脚本
来源: 互联网 发布时间:2016-08-28
本文导语: 我现在需要一个shell脚本来批量修改文件名,具体需求如下: 在指定的目录下存在大量的文件(假设是down目录,现在需要修改的文件大概有6000个左右,在服务器上),文件名样例为AG000134010100774444.RPT,现在我要把某...
我现在需要一个shell脚本来批量修改文件名,具体需求如下:
在指定的目录下存在大量的文件(假设是down目录,现在需要修改的文件大概有6000个左右,在服务器上),文件名样例为AG000134010100774444.RPT,现在我要把某个时间段内(如20100101-20100115这个时间段内产生的文件)的文件名改成这种形式AG0001340101007744440000.RPT,也就是所有满足条件的文件名后面增加4个0。必须要用一个shell脚本来完成。望网上的高手尽快给个答复,因为明天一大早就要用到这个,所以特别急,万分感谢!
在指定的目录下存在大量的文件(假设是down目录,现在需要修改的文件大概有6000个左右,在服务器上),文件名样例为AG000134010100774444.RPT,现在我要把某个时间段内(如20100101-20100115这个时间段内产生的文件)的文件名改成这种形式AG0001340101007744440000.RPT,也就是所有满足条件的文件名后面增加4个0。必须要用一个shell脚本来完成。望网上的高手尽快给个答复,因为明天一大早就要用到这个,所以特别急,万分感谢!
|
#!/bin/bash
if [ $# -ne 2 ];then
echo "Usage:$0 date_1 date_2"
exit 1
fi
target_path="/path/" //修改成你文件夹的路径
filename=`ls ${target_path}`
for file in ${filename}
do
#如果是上面我说的第一种情况,把这句的注释去掉
#file_date=`stat ${target_path}${file} | grep -i "Modify" | awk '{print $2}' | sed "s/-//g"`
#如果是上面我说的第二种情况,把这句的注释去掉
#file_date=`stat ${target_path}${file} | grep -i "Change" | awk '{print $2}' | sed "s/-//g"`
#如果是上面我说的第三种情况,把这句的注释去掉
#file_date=`stat ${target_path}${file} | grep -i "Access" | awk '{print $2}'|tail -n 1 |sed "s/-//g"`
if [ $file_date -ge $1 -a $file_date -le $2 ];then
tmp=`echo ${file} | awk -F. '{print $1}'`
new_file=${tmp}0000.RPT
mv ${target_path}${file} ${target_path}${new_file}
fi
done
执行的时候 第一个参数就是较小的时间(20100101) 第二个参数是较大的时间(20100115)
比如你这个shell保存为test.sh 则/path/test.sh 20100101 20100115来执行