동일한 두 문자 사이의 텍스트가 제거되도록 폴더의 모든 파일 이름을 바꿉니다.

동일한 두 문자 사이의 텍스트가 제거되도록 폴더의 모든 파일 이름을 바꿉니다.

내 폴더에는 다음과 같은 이름의 파일이 많이 있습니다.

abc.test.txt
edf.main.txt
num2.tb.doc
file3.map.csv
file4.test.csv

사이에 있는 텍스트가 제거 되도록 파일 이름을 바꾸고 ., 위 파일의 이름을 다음과 같이 바꾸려고 합니다.

abc.txt
edf.txt
num2.doc
file3.csv
file4.csv

가능합니까?

비슷한 것을 찾았지만 내 필요에 맞지 않았습니다.

문자나 문자열을 제거하여 여러 파일의 이름을 바꾸는 방법은 무엇입니까?

답변1

zsh에서는 다음을 사용하십시오.zmv. 실행 autoload -U zmv하거나 ``/.zshrc`에 넣은 다음

zmv '(*).*(.*)' '$1$2'

또는

zmv -w '*.*.*' '$1.$3'

또는 다음 prename명령(각 파일 이름에 표현식을 적용하는 Perl 스크립트)이 있는 경우:

prename 's/\..*\././' *.*.*

쉘을 사용하여 각 POSIX 시스템에서 사용 가능한 도구만 사용하십시오.반지, 그리고매개변수 확장이름의 일부를 추출합니다.

for x in *.*.*; do
  mv -- "$x" "${x%.*.*}.${x##*.}"
done

답변2

Perl 이름 바꾸기 유틸리티를 사용하십시오.

prename 's/\.[^.]*\././' *

prenamePerl 표현식을 사용하여 파일 이름을 바꿀 수 있습니다.

일부 시스템에서는 동일한 프로그램이 rename대신 (또는 마찬가지로) 호출됩니다 prename. rename매우 다르게 작동 하는 다른 프로그램도 있습니다 . rename확인하려면 시스템의 매뉴얼 페이지를 확인하세요.

예를 들어 Debian 시스템에서는 기본적으로 시스템을 통한 rename심볼릭 링크입니다 . 다른 배포판은 다를 수 있습니다.prename/etc/alternatives

rename데비안에는 이라는 향상된 버전이 포함된 패키지도 있습니다 . 다음은 동일한 스크립트의 업데이트된 버전입니다. 대안 중에서 우선순위가 높으므로 패키지를 설치하면 심볼릭 링크가 .prenamefile-renamerenamefile-rename

답변3

이건 처리해야지

for file in $(find ./)
do
  newname=$(echo ${file} | sed -e 's/\.\(.*\)\././')
  mv ${file} ${newname}
done

관련 정보