Shell-Script
重命名文件名中已有數字的文件
我有以下名稱的文件,從 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
我嘗試使用重命名並查看以前的問題,但是,我找不到可以適應的東西。
謝謝,
使用 perl
rename
實用程序:$ 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-rename
、perl-rename
或prename
。不要與具有完全不同和不兼容的功能和命令行選項的rename
實用程序混淆。util-linux
注意 2:該
-n
選項使其成為試執行,因此它只會顯示它會做什麼而不實際重命名任何文件。當您確認它可以執行您想要的操作時,刪除-n
,或將其替換為詳細輸出。-v
注意 3:perl rename 可以將文件名作為來自命令行或標準輸入的參數(作為換行符或 NUL 分隔的文件名)。rename 的
-0
選項與來自find ... -print0
. 它也適用於find ... -exec rename ... {} +
.