我试图在 cmd (Ubuntu) 中删除文件名中的随机数字。
我想做的是:
279796_3D AXL MPR_26438044_0001.dcm —> 279796_3D AXL MPR_0001.dcm
279796_3D AXL MPR_26438446_0011.dcm —> 279796_3D AXL MPR_0011.dcm
另外,有没有办法在Python中做到这一点?
我打算将随机数字重新排列到文件名后面,然后将这些数字全部删除。但我被困住了。
答案1
使用基于 perl 的文件重命名(来自 Ubuntu 包rename
):
$ rename -n 's/_\d+_/_/' *.dcm
rename(279796_3D AXL MPR_26438044_0001.dcm, 279796_3D AXL MPR_0001.dcm)
rename(279796_3D AXL MPR_26438446_0011.dcm, 279796_3D AXL MPR_0011.dcm)
使用mmv
:
$ mmv -n '*_*_*_*.dcm' '#1_#2_#4.dcm'
279796_3D AXL MPR_26438044_0001.dcm -> 279796_3D AXL MPR_0001.dcm
279796_3D AXL MPR_26438446_0011.dcm -> 279796_3D AXL MPR_0011.dcm
-n
一旦您确信它会做正确的事情,就将其删除。
使用 bash shell 和 KSH 风格的扩展通配符:
$ shopt -s extglob
$ for f in *.dcm; do echo mv -n -- "$f" "${f/_+([0-9])_/_}"; done
mv -n -- 279796_3D AXL MPR_26438044_0001.dcm 279796_3D AXL MPR_0001.dcm
mv -n -- 279796_3D AXL MPR_26438446_0011.dcm 279796_3D AXL MPR_0011.dcm
在这里,echo
一旦您确信它正在做正确的事情,就将其删除。
答案2
我们可以批量重命名文件蟒蛇3
使用re
和pathlib
模块。
python3 -c 'import re, pathlib
for f in pathlib.Path(".").glob("*.dcm"):
f.rename(re.sub(r"_\d+(?=_)","",f.name))
'
答案3
调用cut
应该可以解决问题:
cut -d_ -f-2,4-
测试它:
echo "279796_MPR_26438044_0001.dcm" | cut -d_ -f-2,4-
用它来重命名一堆文件变成:
for f in *.dcm; do mv "$f" "$(echo "$f" | cut -d_ -f-2,4-)"; done
cut
_
每次出现分隔符( )时分割单词-d _
,并打印从第一个到第二个 ( -f-2
) 以及从第四个到最后一个 ( ,-4-
) 的字段。