서로 다른 숫자를 포함하는 여러 파일의 이름 바꾸기

서로 다른 숫자를 포함하는 여러 파일의 이름 바꾸기

다음 형식의 파일이 여러 개 있습니다. (파일은 일반적이지 않은 각 파일 이름에 해당합니다.)

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 extglobBash에서 사용하여 "${f%%_S+([0-9]).tab}"거기에 있는 임의의 숫자를 일치시키십시오.)

관련 정보