본문 바로가기

일::개발

bash 에서 파일 이름 prefix 제거

someprefix_20220323_12.jpg

someprefix_20220323_14.jpg

someprefix_20231212_12.jpg

 

이런 파일들에서 "someprefix_" 부분을 쉽게 제거하는 방법은

 

> for file in someprefix_*; do mv "$file" "${file#someprefix_}"; done;

 

이렇게 해주면 된다.

 

man bash 해서 "Parameter Expansion" 부분을 보면 설명이 나오는데, 

기니까 간단하게 여기서 필요한 부분만 뽑으면,

 

${file#word} 라고 쓰면 왼쪽에서 word 를 제거한 부분을 반환한다.

${file##word} 라고 쓰면 역시 왼쪽에서 word를 제거한 부분을 반환하는데, 가장 긴 부분을 제거한다.

 

무슨 말이냐 하면

 

20220202_343434_01.jpg 

 

파일이 있을 때

 

${file#2*2} 하면 20220202_343434_01.jpg 에서 제일 처음에 나오는 202 를 제외한 "20202_343434_01.jpg" 가 반환되지만,

${file##2*2} 하면 20220202_343434_01.jpg 에서 2*2에 해당하는 가장 긴 match인 202202202 를 제외한 "_343434_01.jpg" 가 반환되는 것이다.

 

오른쪽에서 제거하려면 %, %% 를 사용.

 

 

자주 안 쓰니 쓸 때마다 까먹어서 찾아봐야 함 ㅠㅠ