Shell-Script

重命名文件名中已有數字的文件

  • May 17, 2022

我有以下名稱的文件,從 water-frames0.gro 到 water-frames201.gro

water-frames0.gro  water-frames119.gro  water-frames138.gro  water-frames157.gro
water-frames116.gro  water-frames135.gro  water-frames154.gro

如何在數字前添加前導零和破折號,以便文件在終端上正確排序?我需要它來處理數千個文件名,所以我想添加一些額外的零很有用。

我想新的文件名是

water-frames-0000.gro  water-frames-0119.gro  water-frames-0138.gro  water- 
frames-0157.gro water-frames-0116.gro  water-frames-0135.gro  water-frames-0154.gro

我嘗試使用重命名並查看以前的問題,但是,我找不到可以適應的東西。

謝謝,

使用 perlrename實用程序:

$ rename -n 's/(\d+)(\.gro)$/sprintf "-%04i%s", $1, $2/e' ./*.gro
rename(./water-frames0.gro, ./water-frames-0000.gro)
rename(./water-frames116.gro, ./water-frames-0116.gro)
rename(./water-frames119.gro, ./water-frames-0119.gro)
rename(./water-frames135.gro, ./water-frames-0135.gro)
rename(./water-frames138.gro, ./water-frames-0138.gro)
rename(./water-frames154.gro, ./water-frames-0154.gro)
rename(./water-frames157.gro, ./water-frames-0157.gro)

這將 .gro 之前的數字擷取為 $ 1, and the .gro itself as $ 2,因此它們可以用於替換操作符的右側(RHS)s///。perl 正則表達式的/e修飾符導致 rename 將 RHS 評估為 perl 程式碼。詳情請參閱man perlre。以sprintf文字-和格式開頭 $ 1 and $ 2 作為 4 位零填充整數 ( %04i) 和字元串 ( %s)。

注 1:perl 重命名也稱為file-renameperl-renameprename。不要與具有完全不同和不兼容的功能和命令行選項的rename實用程序混淆。util-linux

注意 2:該-n選項使其成為試執行,因此它只會顯示它會做什麼而不實際重命名任何文件。當您確認它可以執行您想要的操作時,刪除-n,或將其替換為詳細輸出。-v

注意 3:perl rename 可以將文件名作為來自命令行或標準輸入的參數(作為換行符或 NUL 分隔的文件名)。rename 的-0選項與來自find ... -print0. 它也適用於find ... -exec rename ... {} +.

引用自:https://unix.stackexchange.com/questions/702844