다음 형식의 파일이 여러 개 있습니다. (파일은 일반적이지 않은 각 파일 이름에 해당합니다.)
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}"
거기에 있는 임의의 숫자를 일치시키십시오.)