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


14

이름이 많은 tiff 파일이 있습니다.

sw.001.tif
sw.002.tif
...

.tif각 파일의 끝에서 를 제거하고 싶습니다 . rename명령을 사용하여이를 수행하려면 어떻게해야합니까?


2
리눅스 나 유닉스 파일 시스템은 Windows 나 VMS 스타일의 "확장자"를 사용하지 않는다는 것을 명심하십시오. 파일 이름의 접미사가 ".tif"또는 ".c"또는 ".o"또는 ".so 인 것은 관례입니다. " 또는 무엇이든.
브루스 에디 거

괜찮습니다 ... 파일을 Windows에서 Linux로 가져오고 있습니다 :)
Paul

1
기술적으로 말해서 Windows는 파일 확장자를 사용하지 않습니다. Windows 95의 파일 관리자는 파일 이름의 마지막 문자를 계속 사용하여 MS-DOS 명명 체계를 위반 한 후 파일 형식을 결정한 것이므로 그 규칙은 그대로 남아 있습니다.
RAKK

답변:


24

perl의는 rename(같은 전형적으로도 불리는 데비안에서 발견 prename, 또는) 이 파생 ( rename데비안에서 패키지) :

rename 's/\.tif$//' *.tif

util-linux rename( rename.ul데비안의 Red Hat에서 일반적으로 볼 수 있음 ) :

rename -- .tif '' *.tif

(이름은으로 바뀝니다 blah.tiffany.tif. blahfany.tif)


2
"Debian"이름 변경은 Larry Wall (Perl과 함께 제공됩니까?)이고 "Red Hat"이름은 util-linux (Debian IIRC의 rename.ul)에서 가져온 것입니다.
XTL

@XTL : 맞습니다. 나는 그것들을 데비안이나 레드햇 파생물에서 찾은 "이름 바꾸기"프로그램이라 부릅니다.
Ignacio Vazquez-Abrams

정말 고마워! 나는 다른 버전의 '이름 바꾸기'가 있다는 것을 결코 깨닫지 못했습니다. 나는 데비안과 레드햇의 명령 사이에 다른 미묘한 차이점이 있다고 가정합니다. 차이점을 찾아봐야합니다.
Paul

두 번째 명령은 유효하지 않은 구문을 생성했지만 첫 번째 명령은 작동했습니다.
HelloWorld

6

이름을 바꾸지 않으려면 다음을 수행하십시오.

$ for i in *.tif; do mv -i $i `basename $i .tif`; done

(-i는 파일 ​​교체에 대해 경고합니다)


15
보다 빠른 버전 :for i in ./*.tif; do mv -i "$i" "${i%.tif}"; done
jw013

마지막 댓글 +1 빈 공간이있는 파일 이름이 더 안전합니다.
petobens

1
@ jw013 귀하의 의견은 최상위 답변이어야합니다.
롤랜드

1
rename -- .oldext .newext *.oldext

이전 확장을 새 확장으로 대체합니다. 확장을 간단히 제거하기 위해 빈 문자열을 인수로 명시 적으로 전달할 수 있습니다.

rename -- .gz.tmp  '' *.gz.tmp

위의 명령을 사용하면 .gz.tmp현재 폴더에 확장자가있는 모든 파일의 이름이로 바뀝니다 filename.gz.

자세한 내용은 Linux : 여러 파일의 파일 확장자 제거 를 참조하십시오.


1
그것은 util-linux 구현이 from rename의 전통적인 rename명령 과 호환되지 않으며 (보다 훨씬 제한적 이라고 가정합니다 ) perl.
Stéphane Chazelas

또한 파일 이름 내 에서 처음 나타나는 항목을 대체하며 .oldext반드시 확장자 ( foo.oldextasy.oldext이름이 footasy.oldext) 로 바뀔 필요는 없습니다 .
Stéphane Chazelas

1

IBM AIX를 사용하는 경우 rename명령이 없으므로 파일 확장자를 일괄 제거하려면 일반 vanilla System V UNIX 명령을 사용해야합니다.

for file in *.tif; do
   mv $file `echo $file | sed 's/.tif$//'`;
done;

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.