폴더에 일련의 파일이 있고 파일 이름 중간에 _S
( _S1
, S2
, ....)로 시작하는 문자열이 있는데 밑줄로 제거/교체해야 합니다. S143
이와 같이
file1_S1_R1
file2_S2_R1
file3_S95_R1
file4_S143_R1
해야한다
file1_R1
file2_R1
file3_R1
file4_R1
나는 표준을 시도했다
rename 's/_S*_/_/g' *
주문하다. 그러나 아무 일도 일어나지 않았습니다. 내 컴퓨터에서는 이름 바꾸기에 와일드카드가 작동하지 않는 것 같습니다. 백슬래시 _
( _
어쨌든 예약된 문자는 아님)를 사용하여 이스케이프 하거나 이러한 트릭은 아무런 차이가 없습니다. 내가 뭘 잘못했나요?
답변1
rename
귀하의 유틸리티가 Perl 유틸리티라고 가정합니다 rename
(첫 번째 인수로 Perl 표현식, 일반적으로 대체 표현식을 사용합니다):
$ ls -l
total 0
-rw-r--r-- 1 kk wheel 0 Oct 4 11:00 file1_S1_R1
-rw-r--r-- 1 kk wheel 0 Oct 4 11:00 file2_S2_R1
-rw-r--r-- 1 kk wheel 0 Oct 4 11:00 file3_S95_R1
-rw-r--r-- 1 kk wheel 0 Oct 4 11:00 file4_S143_R1
$ rename 's/_S\d*_/_/g' *
$ ls -l
total 0
-rw-r--r-- 1 kk wheel 0 Oct 4 11:00 file1_R1
-rw-r--r-- 1 kk wheel 0 Oct 4 11:00 file2_R1
-rw-r--r-- 1 kk wheel 0 Oct 4 11:00 file3_R1
-rw-r--r-- 1 kk wheel 0 Oct 4 11:00 file4_R1
Perl 정규식 대신 파일 이름 globbing 패턴을 사용하여 정규식 오류가 발생할 것이라고 가정할 수 있습니다. S*
(0개 이상의 S
문자 일치)를 S\d*
( S
다음에 0개 이상의 숫자 일치) 로 변경하여 문제를 해결했습니다 .