2013-03-12 51 views
1

我有一个包含多个文件的目录。每个文件可以有不同的前缀和后缀,但都包含六位数字。我想批量重命名文件,使其中一个数字发生改变(特别是第二个)。批量重命名文件以更改数字

因此,例如

*?2????* -> *?5????* 

第二位始终是所有文件是相同的,但一切可以不同。更复杂的是,一些文件有两个六位数字。在两个数字都需要更新的情况下,

例如

*?2????*?2????* -> *?5????*?5????* 

任何指针?

+0

讨论'rename'命令还有无数的其他问题,这里的要求似乎过于具体,不允许任何普遍适用的答案比“遍历文件并重命名带有匹配文件名的答案”更具体。 – chepner 2013-03-12 14:02:57

回答

0

试试这个:

for file in *?2????*; do 
    if [[ $file =~ [0-9]{6} ]]; then 
     echo mv "$file" "$(sed 's/2/5/g' <<< "$file")" 
    else 
     echo mv "$file" "$(sed 's/[0-9]/5/2' <<< "$file")" 
    fi 
done 

sed命令将通过5

取代数字的第二个发生如果这适合您的需求,只是从我的片段删除echo命令。

+0

我认为OP说,在两个6位数字串的情况下,两个串都需要更新(并按照他的例子,以不同的方式)。 – Floris 2013-03-12 14:17:26

+0

抱歉打字。是的,两个字符串都需要更新,但以相同的方式 - 两个字符串中的第二个数字最初都是相同的,并且需要更改为相同的数字。 – 2013-03-12 14:19:44

+0

看到我编辑的POST – 2013-03-12 14:22:35