簡體   English   中英

如何在 bash 中用前導零替換文件名中的數字?

[英]How can I replace numbers in filenames with leading zero in bash?

關於如何添加前導零等數字有類似的問題,但在我的情況下,我的文件名有兩個數字,即章節數和頁數。 兩者都缺少前導零,因此它們沒有按字母順序排序。 使用rename或任何其他方法,我想轉換如下文件:

file_1_1.mp3  to file_01_01.mp3
file_1_12.mp3 to file_01_12.mp3
file_12_1.mp3 to file_12_01.mp3
...

我試過這個:

rename 's/\d+/sprintf("%02d",$&)/e' *.mp3

但它只是將前導零添加到章節編號。

像這樣:

rename -n 's/(\d+)_(\d+)\./sprintf("%02d_%02d.", $1, $2)/e' *.mp3

當 output 看起來很適合您時,刪除-n開關

Output

rename(file_1_12.mp3, file_01_12.mp3)
rename(file_1_1.mp3,  file_01_01.mp3)
rename(file_12_1.mp3, file_12_01.mp3)

人重命名

警告還有其他同名的工具可能會也可能不會這樣做,所以要小心。

作為util-linux package 一部分的重命名命令不會。

如果您運行以下命令( GNU

$ rename

你看到perlexpr ,那么這似乎是正確的工具。

如果沒有,使其成為Debian和衍生產品Ubuntu的默認值(通常已經如此):

$ sudo apt install rename
$ sudo update-alternatives --set rename /usr/bin/file-rename

對於archlinux:

pacman -S perl-rename

對於 RedHat 系列發行版:

yum install prename

'prename' package 位於EPEL存儲庫中。


對於 Gentoo:

emerge dev-perl/rename

對於 *BSD:

pkg install gprename

p5-File-Rename


對於 Mac 用戶:

brew install rename

如果您在其他發行版中沒有此命令,請搜索您的 package 管理器以安裝它或手動執行(無依賴...)


這個工具最初是由 Perl 的父親 Larry Wall 編寫的。

這個 shell 腳本有效:

for file in *mp3
do
    new=$(echo "$file" | sed 's/_/_0/g; s/_0\([0-9][0-9]\)/_\1/g;');
    mv "$file" "$new";
done;
  • 0添加到找到的每個下划線
  • 如果它導致至少連續數字,則刪除該0

編輯:根據g s評論,在第二個替代命令中添加了全局標志

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM