【问题标题】:remove timestamp into file name with bash?用bash将时间戳删除到文件名中?
【发布时间】:2018-12-28 20:10:59
【问题描述】:

我正在寻找一种通过给文件添加时间戳来更改文件名的方法。事情是这样发生的:

2018-07-20_15:30:27_m_group_types.csv

这就是我希望的样子:

m_group_types.csv

我真的不明白怎么...

【问题讨论】:

    标签: bash awk sed sh


    【解决方案1】:

    使用 shell 替换,您可以执行以下操作:

    $ filename="2018-07-20_15:30:27_m_group_types.csv"
    $ mv "$filename" "${filename#*_*_}"
    

    如果你有很多这种形式的文件,可以考虑使用ZSH,使用zmv命令:

    $ zmv -n '[^_]##_[^_]##_(*csv)' '$1'
    

    删除-n 以实际执行此操作,(-n 是空运行)

    【讨论】:

      【解决方案2】:

      你可以试试cut

      echo "2018-07-20_15:30:27_m_group_types.csv" | cut -d "_" -f3-

      输出:

      m_group_types.csv


      说明:

      -d:对于分隔符,在这种情况下我们选择"_"

      -f:选择字段进行切割,在这种情况下,分隔符"_" 拆分字符串2018-07-20_15:30:27_m_group_types.csv5字段:

      字段 1:2018-07-20

      字段 2:15:30:27

      字段 3:m

      字段 4:group

      字段 5:types.csv

      因此,使用-f3-,我们选择从Field 3 中删除,甚至更远。

      【讨论】:

        【解决方案3】:

        请您尝试关注一下。

        echo "2018-07-20_15:30:27_m_group_types.csv" | sed -E 's/.*[0-9]+:[0-9]+:[0-9]+_//'
        

        awk:

        echo "2018-07-20_15:30:27_m_group_types.csv" | awk 'match($0,/.*[0-9]+:[0-9]+:[0-9]+_/){print substr($0,RSTART+RLENGTH)}'
        

        【讨论】:

        【解决方案4】:

        你也可以试试

        mv $(date +%Y-%m-%d_%H:%M:%S_)m_group_types.csv m_group_types.csv
        

        mv $(date +%Y-%m-%d_%H:%M:%S_ -d "DATE_HERE_IF_NOT_TODAY")m_group_types.csv m_group_types.csv
        

        【讨论】:

        • 这就像完全键入mv 命令一样,这里没有单一的加速形式。第一个命令需要在文件名包含的时间准确执行,第二个命令你实际上需要变量“DATE_HERE_IF_NOT_TODAY”中的时间,那么你可以完全跳过date命令。
        猜你喜欢
        • 2013-12-03
        • 2019-08-18
        • 2022-01-06
        • 1970-01-01
        • 1970-01-01
        • 2014-12-17
        • 2016-05-23
        • 1970-01-01
        相关资源
        最近更新 更多