如何重新排列和删除文件名

如何重新排列和删除文件名

我试图在 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 使用repathlib模块。

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-) 的字段。

相关内容