파일 이름에서 배치 파일 이름 바꾸기 스크립트 교체 하위 문자열?


1

title_december_word1_word2.png 와 같은 파일 그룹이 있으며 디렉토리를 통해 반복 word1하고 word2각 파일 내에서 스왑 하고 싶습니다 .

button_december_state_pressed.png- 에서 이동 ->button_december_pressed_state.png

이 작업을 수행하는 방법에 대한 제안이 있습니까?

OS X에서 찾은 대부분의 배치 프로그램은 단어를 분류하기 위해 문자를 지정할 수 없으며 누군가이 문제를 해결하는 빠른 스크립트로 나를 도울 수 있기를 바랍니다.

답변:


1

bash에서는 다음과 같이 수행 할 수 있습니다.

  for i in *; do echo $i | awk -F'[_.]' '{print $1"_"$2"_"$4"_"$3 }' ; done

이 명령은 먼저 현재 디렉토리에서 모든 파일을 찾은 다음이 이름 ( 이 파일 이름에 3 개의 밑줄과.가 있는지 확인하지 않고 가정 )을 awk에 공급하여 원하는 순서로 다시 정렬합니다.

유일한 까다로운 부분은 -F'[_.]'옵션 -F' '이 다른 필드 사이의 구분 기호를 식별하는 데 사용 되며이 경우 구분 기호는 기본값 인 공백을 취하는 것입니다. 그러나이 옵션 -F'[_.]'은 교환 가능한 요소의 문자 클래스 (이 경우 밑줄과 점)를 정의하며 이는 마음대로 구분 기호로 사용할 수 있습니다.

편집하다:

자, 이것은 실제로 아무것도 움직이지 않고 작동하므로 이제 파일 이름을 바꾸는 실제 동작을 구현할 수 있습니다.

  for i in *; do ni=$(echo $i | awk -F'[_.]' '{print $1"_"$2"_"$4"_"$3"."$5 }') && mv "$i" "$ni" ; done

이것은 작동하지만 이제 어떻게 변경 사항을 실제 파일 이름에 적용 할 수 있습니까?
user1911904

승인. 이제 내 편집 내용을 참조하십시오.
MariusMatutiae

터미널 창에 인쇄되고 스크립트는 파일과 동일한 디렉토리에 있지만 수정 사항 만 인쇄하지만 파일 자체는 새 이름으로 수정되지 않았습니다.
user1911904

파일 이름을 인쇄하는 것이 아니라 파일 이름을 변경하는 데 '이름 바꾸기'를 사용할 필요는 없습니까?
user1911904

@ user1911904 죄송합니다. 실제로 조심하기 전에 실제로 어떤 일이 발생할지 미리 알 수 없습니다. 이제 편집 한 게시물에 실제 명령이 있습니다. 그리고 이름 바꾸기가 아닌 mv를 사용합니다.
MariusMatutiae

2

Zsh와 zmv

zsh (OS X에서 기본값으로 제공됨)가있는 경우 다음을 사용할 수 있습니다 zmv.

% zsh
% autoload -U zmv
% zmv 'title_december_(*)_(*).png' 'title_december_$2_$1.png'

다음 명령을 실행합니다 ( zmv -n실제로 이름을 바꾸지 않고 드라이 런을 수행하는 데 사용 ) :

mv -- title_december_word1_word2.png title_december_word2_word1.png

이미지마다 첫 번째 부분이 다른 경우 분명히 더 유연해질 수 있습니다.

% zmv '(*)_(*)_(*).png' '$1_$3_$2.png' 
mv -- foo_bar_word1_word2.png foo_bar_word2_word1.png
mv -- title_december_word1_word2.png title_december_word2_word1.png

이것은 경기가 욕심이 많기 때문에 다른 경기 그룹보다 마지막에 올 때까지 모든 밑줄을 삼키기 때문에 효과가 있습니다.


펄 스타일 rename

OS X rename에서는 Homebrew 를 사용할 수 있습니다 .

$ rename -n 's/(.*)_(.*)_(.*).png/$1_$3_$2.png/' *
'foo_bar_word1_word2.png' would be renamed to 'foo_bar_word2_word1.png'
'title_december_word1_word2.png' would be renamed to 'title_december_word2_word1.png'

-n옵션은 이름이 바뀐 것을 인쇄합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.