폴더에서 파일 이름을 바꿀 때 와일드카드 문자가 이름 바꾸기에 적용되지 않습니다.

폴더에서 파일 이름을 바꿀 때 와일드카드 문자가 이름 바꾸기에 적용되지 않습니다.

폴더에 일련의 파일이 있고 파일 이름 중간에 _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개 이상의 숫자 일치) 로 변경하여 문제를 해결했습니다 .

관련 정보