名前に「[]」を含むファイルの名前を変更できませんか?

名前に「[]」を含むファイルの名前を変更できませんか?

私はDebianで名前変更機能を使用しようとしましたが、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

おすすめ記事