초보 질문입니다. 이 답변을 따르십시오파일 이름의 마지막 부분을 앞으로 이동, 동일한 작업을 수행하려고 하는데 제 경우의 모든 파일에는 대괄호가 포함되어 있습니다.
내가 원하는 것은 제목을 괄호의 반대쪽으로 이동하는 것입니다(파일 확장자를 유지함). 따라서 title ![s2_e2].mp4
이름이 다음으로 변경됨: [s2_e2]title !.mp4
첫 번째 부분에는 느낌표와 공백이 포함될 수 있지만 이스케이프해야 하는 다른 문자는 포함될 수 없습니다.
나는 이것을 생각해 냈지만 첫 번째 대괄호까지만 파일 이름을 제거합니다.rename -n 's/^.*\[//' *
나는 올바른 길을 가고 있습니까? Linux에서 Perl 이름 바꾸기 도구를 사용하여 어떻게 수행합니까?
감사해요!
답변1
내가 올바르게 이해했다면 대괄호 안의 텍스트를 파일 이름의 시작 부분으로 이동해야 합니다. 파일 이름에 대괄호 세트만 있다고 가정하면 다음을 수행할 수 있습니다.
rename -n 's/(.*)(\[.+?\])/$2$1/s' *
예제에서 이 명령을 실행하면 다음이 제공됩니다.
$ rename -n 's/(.*)(\[.+?\])/$2$1/s' *
title ![s2_e2].mp4 -> [s2_e2]title !.mp4
답변2
나는 여기를 zsh
사용할 것이다 zmv
:
$ autoload -Uz zmv # best in ~/.zshrc
$ zmv -n '(*)(\[*\])(*)' '$2$1$3'
mv -- 'title ![s2_e2].mp4' '[s2_e2]title !.mp4'
[
(파일 이름에 / 쌍이 두 개 이상 있으면 / 뒤에 최소한 하나가 있는 ]
쌍이 가장 오른쪽에서 가장 오른쪽으로 이동합니다 . 예를 들어 에서는 이동됩니다 .)[
]
]
[a [b c]] [d [e]]
[e]]
오늘날 Perl에는 다양한 변형이 있고 rename
그 함정도 너무 많아서 모두 따라잡기가 어렵습니다.
zmv
또한 자체 보호 장치 중 일부를 구현했습니다. 시작하기 전에 충돌이 있는지 확인합니다.어느이름을 바꿉니다.