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

posted @ 2012-08-03 22:21  透传云  阅读(937)  评论(0编辑  收藏  举报