내 폴더에는 다음과 같은 이름의 파일이 많이 있습니다.
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/\.[^.]*\././' *
prename
Perl 표현식을 사용하여 파일 이름을 바꿀 수 있습니다.
일부 시스템에서는 동일한 프로그램이 rename
대신 (또는 마찬가지로) 호출됩니다 prename
. rename
매우 다르게 작동 하는 다른 프로그램도 있습니다 . rename
확인하려면 시스템의 매뉴얼 페이지를 확인하세요.
예를 들어 Debian 시스템에서는 기본적으로 시스템을 통한 rename
심볼릭 링크입니다 . 다른 배포판은 다를 수 있습니다.prename
/etc/alternatives
rename
데비안에는 이라는 향상된 버전이 포함된 패키지도 있습니다 . 다음은 동일한 스크립트의 업데이트된 버전입니다. 대안 중에서 우선순위가 높으므로 패키지를 설치하면 심볼릭 링크가 .prename
file-rename
rename
file-rename
답변3
이건 처리해야지
for file in $(find ./)
do
newname=$(echo ${file} | sed -e 's/\.\(.*\)\././')
mv ${file} ${newname}
done