shell批量以日期重命名文件
在很多服务日志的情况下,或者有很多零散的文件要批量整理到一起时,通过shell脚本能很快解决:
DATE=$(date +%Y_%m_%d-%H%M%S); find * -type f | while read file; do mv $file ${file}.${DATE}; done
以上语句能快速找出目录下所有文件,并重命名。
那么如果要找出指定后缀的文件,并重命名该如何操作呢?为了更好的理解,下面来把代码分开执行:
find ./log -name "*.log" | while read file do DATE=$(date +%Y%m%d_%H%M%S_%N) mv $file ./temp_log/${DATE}.log done
第一行语句:找出当前log目录下的所有以*.log为后缀的文件。
第三行语句:把当前时间变量导入DATE变量(产生一个随机数)。
第四行语句:移动并重命名查找到的文件。
下面再解释一下date变量:
%Y 年份
%m 月份
%d 日期
%H 小时
%M 分钟
%S 秒
%s 获得时间戳,当前到:1970-01-01 00:00:00 相隔的秒数
%N 获得当前时间的纳秒数据,精确到亿分之一秒
所以,我们可以看出DATE=$(date +%Y%m%d_%H%M%S_%N)变量输出的基本上算是一个随机数,因为在CPU执行时%N很难出现相同结果。如此一来,在重命名的时候就不会产生文件覆盖的情况。
关于随机数的产生还有一个系统变量$RANDOM:
比如在终端输入:echo $RANDOM
返回值为:26885
我们还可以为它进行md5加密:echo $RANDOM|md5sum
返回值:5ebc600b4d19e86719a491d7dd365880