zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    11. Container With Most Water
    9. Palindrome Number
    375. 猜数字大小 II leetcode java
    leetcode 72 编辑距离 JAVA
    73. 矩阵置零 leetcode JAVA
    快速排序 JAVA实现
    63. 不同路径 II leetcode JAVA
    重写(override)与重载(overload)
    62 不同路径 leetcode JAVA
    leetcode 56 合并区间 JAVA
  • 原文地址:https://www.cnblogs.com/inteliot/p/2622347.html
Copyright © 2011-2022 走看看