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 셸 및 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-
필드를 인쇄합니다.