【问题标题】:Rename large number of files in bash [closed]重命名bash中的大量文件[关闭]
【发布时间】:2013-12-02 21:56:27
【问题描述】:

我有很多要重命名的文件。

很像this

这就是我的文件的样子

something.pcap1
something.pcap10
something.pcap11
something.pcap12
...
something.pcap111
something.pcap1111

基本上我想重命名所有文件,以便数字用 0 填充,它们是 5 位数字。

something.pcap00001

【问题讨论】:

    标签: linux bash


    【解决方案1】:

    一个简单的 for 循环就可以解决问题(可以是脚本文件):

    for file in $(ls -1 something.pcap*); do
        [[ ${file} =~ ^something.pcap([[:digit:]]*).* ]]
        newfile=$(printf "something.pcap%05d" ${BASH_REMATCH[1]})
        mv ${file} ${newfile}
    done
    

    【讨论】:

    • 这很好:)。 +1。以前从未见过 BASH_REMATCH 用法
    【解决方案2】:

    这样的?

    rename 's/\d+$/sprintf("%05d",$&)/e' soemthing.pcap*
    

    注意:这适用于 debian 及其衍生产品中的 rename

    【讨论】:

    • centos 呢。它尝试过,但没有奏效。没有用,我的意思是文件名保持不变。
    • 好问题。在 deb 中,重命名是指向 /usr/bin/prename 的符号链接,这似乎是 deb 的 perl 安装的一部分。也许检查 Centos 的 perl 是否有一个名称中带有 rename 的脚本可执行文件?如果你不能 - 脚本很小;这是粘贴的 URL pastebin.com/7QkWtPSd
    【解决方案3】:

    这样的事情呢?

    #!/bin/bash
    for i in $(ls something.pcap*); do
     q=$(echo $i|sed -e 's/pcap/pcap00000/;s/pcap0*\([0-9]\{6,\}\)$/pcap\1/')
     mv $i $q
    done
    

    我希望这会有所帮助

    【讨论】:

      猜你喜欢
      • 2011-01-04
      • 1970-01-01
      • 2012-09-02
      • 1970-01-01
      • 2015-09-28
      • 2013-10-06
      • 2010-10-10
      相关资源
      最近更新 更多