使用重命名 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
)并找到与文件名中所需数字相匹配的正确模式。
我有一些视频文件需要从其中的数字部分中减去。例如我的文件名是 '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
)并找到与文件名中所需数字相匹配的正确模式。