이름에 "[ ]"가 포함된 파일의 이름을 바꿀 수 없나요?

이름에 "[ ]"가 포함된 파일의 이름을 바꿀 수 없나요?

나는 데비안에서 이름 바꾸기 기능을 사용하려고 시도했으며 unix.stackexchange에서 검색했지만 내 시나리오의 솔루션은 다음 파일로 구성된 것 같습니다.[]

[800p]-[WOLU-H]-test1.mkv
[800p]-[WOLU-H]-test2.mkv

원하는 출력은 단지

[WOLU-H]-test1.mkv
[WOLU-H]-test2.mkv

나는 노력했다

rename [800p]-[WOLU-H] [WOLU-H] [800p]-*

하지만 계속해서 이렇게 말합니다.

Bareword found where operator expected at (eval 1) line 1, near "800p"
    (Missing operator before p?)
syntax error at (eval 1) line 1, near "800p"

나는 다음과 같은 다른 것을 시도했습니다.

rename 's/[800p]-[WOLU-H]/[WOLU-H]/' [800p]-*

그러나 출력도 실패합니다.

Invalid [] range "U-H" in regex; marked by <-- HERE in m/[800p]-[WOLU-H <-- HERE ]/ at (eval 1) line 1.

누군가 나에게 올바른 프로세스를 말해 줄 수 있습니까? 감사해요!

고쳐 쓰다

나는 이것을 시도했습니다 :

rename 's/\[800p\]-\[WOLU-H\]/\[WOLU-H\]/' \[800p\]-*

하지만 오류:

Bareword found where operator expected at (eval 1) line 1, near "800p"
        (Missing operator before p?)
Backslash found where operator expected at (eval 1) line 1, near "p\"
Backslash found where operator expected at (eval 1) line 1, near "]\"
        (Missing operator before \?)
Backslash found where operator expected at (eval 1) line 1, near "]\"
        (Missing operator before \?)
syntax error at (eval 1) line 1, near "800p"
Unmatched right square bracket at (eval 1) line 1, at end of line
Unmatched right square bracket at (eval 1) line 1, at end of line

나는 또한 이것을 시도했습니다 :

rename "[800p]-[WOLU-H]" "[WOLU-H]" "[800p]-"*

하지만 여전히 오류가 보고되었습니다.

Bareword found where operator expected at (eval 1) line 1, near "800p"
        (Missing operator before p?)
syntax error at (eval 1) line 1, near "800p"

-숫자가 헷갈리는 줄 알았는데 ?

답변1

[또한 ]및 정규식에는 특별한 의미가 있으므로 및 bash로 이스케이프해야 합니다 . 다음과 같이 작동해야 합니다.\[\]

rename 's/\[800p\]-\[WOLU-H\]/\[WOLU-H\]/' \[800p\]-*

예:

$ touch [800p]-[WOLU-H]-test1.mkv [800p]-[WOLU-H]-test2.mkv
$ ls
[800p]-[WOLU-H]-test1.mkv  [800p]-[WOLU-H]-test2.mkv
$ rename 's/\[800p\]-\[WOLU-H\]/\[WOLU-H\]/' \[800p\]-*
$ ls
[WOLU-H]-test1.mkv  [WOLU-H]-test2.mkv

답변2

왜 단순히 따옴표를 사용하지 않습니까? 따라서 해당 항목을 탈출할 필요가 없습니다 [.

rename "[800p]-[WOLU-H]" "[WOLU-H]" "[800p]-"*

( *밖이니까 참고하세요 "...")

편집하다:댓글을 보니 그것이 작동하지 않는다는 것을 알게 되었습니다. 여기서 작동하기 때문에 이유를 이해할 수 없습니다.

$ ls -1
[800p]-[WOLU-H]-foobar.txt
[800p]-[WOLU-H]-hello.txt
[800p]-[WOLU-H]-world.txt

$ rename "[800p]-[WOLU-H]" "[WOLU-H]" "[800p]-[WOLU-H]"*

$ ls -1
[WOLU-H]-foobar.txt
[WOLU-H]-hello.txt
[WOLU-H]-world.txt

$ rename -V
rename (util-linux-ng 2.17.2)

CentOS 6.6을 사용하고 있는데 그런 차이일지도 모르겠네요... 아무튼 틀린 답변 죄송합니다...

관련 정보