使用重命名 sed 从文件名中减去

Subtract from filename with rename sed

我有一些视频文件需要从其中的数字部分中减去。例如我的文件名是 '2x042 - So You Want To Be In Pictures.mkv' 但它应该是 '2x002 - So You Want To Be In Pictures.mkv' 我一直在玩重命名和 sed 并且还没弄清楚如何让它做这个减法 (-40)

这是我尝试过的:

rename -n -v 's/(\d+){3}.*(\.mkv)/(-40)./e' *

但这最终给了我 rename(2x041 - The Return of Sailor Moon.mkv, 2x-39.mkv) 这是不对的。我该怎么做?

使用独立的 Perl rename:

rename -n 's/(\d+) /sprintf("%03d ",-40)/e' *.mkv

输出:

rename(2x042 - So You Want To Be In Pictures.mkv, 2x002 - So You Want To Be In Pictures.mkv)

如果输出正常,请删除 -n

您可以像@Cyrus 回答的那样使用rename,或者直接使用perl

测试:

# list of file
ls file*.txt -1
file.1.txt
file.2.txt
file.3.txt
file.4.txt
file.5.txt
file.6.txt
file.7.txt
file.8.txt
file.9.txt

# increment
perl -le '($old=$_) && s/(\d)(?=\.txt)/+1/eg && print for <*.txt>'
file.2.txt
file.3.txt
file.4.txt
file.5.txt
file.6.txt
file.7.txt
file.8.txt
file.9.txt
file.10.txt

# decrement
perl -le '($old=$_) && s/(\d)(?=\.txt)/-1/eg && print for <*.txt>'
file.0.txt
file.1.txt
file.2.txt
file.3.txt
file.4.txt
file.5.txt
file.6.txt
file.7.txt
file.8.txt

# rename
perl -le '($old=$_) && s/(\d)(?=\.txt)/-1/eg && rename($old,$_) for <*.txt>'
# done
# check the result
!ls
ls file*.txt -1
file.0.txt
file.1.txt
file.2.txt
file.3.txt
file.4.txt
file.5.txt
file.6.txt
file.7.txt
file.8.txt

而不是 txt 使用您想要的扩展名(例如 mkv)并找到与文件名中所需数字相匹配的正确模式。