重新命名檔案在第四個和第六個字元後面加上破折號

重新命名檔案在第四個和第六個字元後面加上破折號

我有一些文件,例如:

20150716_something-here
20150716_something-heretoo
20150716_something-hereaswell

它們需要重命名為

2015-07-16_something-here
2015-07-16_something-heretoo
2015-07-16_something-hereaswell

我嘗試使用Perl 實現rename命令(請參閱我對已接受答案的評論)但我沒有成功。

答案1

使用 bash 的內建子字串擴充:

for f in 2015* ; do
  mv "$f" "${f::4}-${f:4:2}-${f:6}"
done

答案2

sed

LC_ALL=C sed -e 's/\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/\1_\2_\3/' <file

答案3

雖然rename它是一個非常強大的工具,但我通常更喜歡它的簡單性mmv(多次移動)實用程序:

mmv '????????_*' '#1#2#3#4-#5#6-#7#8_#9'

搜尋模式中的?代表單一字符,*代表任意長的字符序列。在替換模式中,every#<number>代表搜尋模式中對應的?or 。*除了 和 之外?*mmv支援括號內的字元範圍(如[a-f])。

mmv將在開始工作之前測試重命名中的任何衝突,這樣您就不會因為覆蓋而丟失檔案。)

答案4

在我的發行版上,我有一個perl-rename指令,它可以使用 perl 樣式的正規表示式來批次重命名檔案。此rename指令僅接受一對固定字串進行重命名。

相關內容