파일 이름의 공백 사이의 단일 공백 ​​및 하이픈 바꾸기

파일 이름의 공백 사이의 단일 공백 ​​및 하이픈 바꾸기

다음과 같은 이름의 파일이 많이 있습니다.

File one - some name - 01-05-2020  
File two - some name - 01-07-2020  
File three - some name - 01-15-2020  

내가 필요한 것은 다음을 교체하는 것입니다.

  • 하이픈으로 연결된 단일 공백입니다.
  • 공백 사이에는 하이픈과 밑줄을 사용하세요.

내 예상 결과는 다음과 같습니다

File-one_some-name_01-05-2020  
File-two_some-name_01-07-2020  
File-three_some-name_01-15-2020 

PD: 저는 Arch 기반의 Manjaro를 사용하고 있습니다.

답변1

한 가지 해결책은 mv다음과 같습니다 sed.

for file in *; do echo mv "$file" "$(echo $file | sed 's/ - /_/g ; s/ /-/g')" ; done

변경 사항을 커밋하려면 첫 번째 에코를 삭제하세요.

시험

$ for file in *; do echo mv "$file" "$(echo $file | sed 's/ - /_/g ; s/ /-/g')" ; done
mv File one - some name - 01-05-2020 File-one_some-name_01-05-2020
mv File three - some name - 01-15-2020 File-three_some-name_01-15-2020
mv File two - some name - 01-07-2020 File-two_some-name_01-07-2020

답변2

Larry Wall의 "perl 이름 바꾸기" 사용( renameDebian/Ubuntu, prenameRHEL/Centos/Fedora):

rename -n -E 's/ - /_/g' -E 's/ /-/g' {file[s]} 

실제 실행을 위해 제거 -n(또는 으로 대체 )합니다.-v

관련 정보