2013-03-12 28 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