![서로 다른 숫자를 포함하는 여러 파일의 이름 바꾸기](https://linux55.com/image/195090/%EC%84%9C%EB%A1%9C%20%EB%8B%A4%EB%A5%B8%20%EC%88%AB%EC%9E%90%EB%A5%BC%20%ED%8F%AC%ED%95%A8%ED%95%98%EB%8A%94%20%EC%97%AC%EB%9F%AC%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EC%9D%B4%EB%A6%84%20%EB%B0%94%EA%BE%B8%EA%B8%B0.png)
다음 형식의 파일이 여러 개 있습니다. (파일은 일반적이지 않은 각 파일 이름에 해당합니다.)
File1_S20.tab
File2_S25.tab
File3_S40.tab
etc.
나는 그것들의 이름을 모두 바꾸어서 다음과 같이 만들고 싶습니다:
File1
File2
File3
etc.
기본적으로 _S$$.tab
모든 파일에서 해당 섹션을 제거하십시오.
파일 이름을 바꾸려면 일반적으로 다음과 같은 이름 바꾸기 명령을 사용합니다. ( 로 rename # somethingelse *.tab
대체됨 )#
somethingelse
하지만 내가 겪고 있는 유일한 문제는 각 파일이 S
.
답변1
rename
쉽게 구부리지 않는 util-linux 버전을 사용하는 것 같습니다 . 이라는 Perl 기반 도구도 있습니다 rename
(참조:"이름 바꾸기"와 "mv"의 차이점은 무엇입니까?)
Perl을 사용하여 이름을 바꾸면 쉽게 얻을 수 있습니다(또는 추가 -n
하고 수행하는 작업을 확인).
rename 's/_S\d+\.tab//' File*.tab
(Perl에서 이름 바꾸기 루프를 구현하는 것은 비교적 간단하지만 정확하고 안전하게 구현하려면 몇 줄의 코드가 필요합니다.)
하지만 셸의 루프를 통해 이 작업을 수행할 수 있습니다.
for f in File*.tab; do
mv -n -- "$f" "${f%%_S[0-9][0-9].tab}"
done
( "${f%%_S*.tab}"
두 숫자 대신 임의의 숫자를 일치시키거나 shopt -s extglob
Bash에서 사용하여 "${f%%_S+([0-9]).tab}"
거기에 있는 임의의 숫자를 일치시키십시오.)