我有很多歌曲檔案要重命名。我正在嘗試洗掉所有歌曲檔案名中最后一次出現的帶括號的字串。例如,它們的格式如下:song - artist (foo) (bar) (text I want to remove).mp3,但我希望輸出為song - artist (foo) (bar).mp3.
目前,我找到了一個 zsh 命令,可以洗掉所有括號中的字串,如這篇文章Renaming files to remove parenthesized strings的答案所示。
那篇文章中幾乎對我有用的解決方案是使用以下命令:
autoload zmv # best in ~/.zshrc
zmv -n '*' '${f//[[:space:]]#[(]*[)]}'
但是,這會洗掉所有檔案名中所有帶括號的字串。我只是想洗掉檔案名中最后一次出現的帶括號的字串。
uj5u.com熱心網友回復:
您可以使用 Bash 的貪婪正則運算式:
#!/bin/bash
re='(.*)(\([^)]*\))(.*)'
for file in *; do
if [[ $file =~ $re ]]; then
echo mv -i -- "$file" "${BASH_REMATCH[1]}${BASH_REMATCH[3]-}"
fi
done
然而,檔案名擴展需要改進。
uj5u.com熱心網友回復:
這個任務也可以通過使用模式匹配而不是正則運算式來完成:
for f in *\(*\).*; do mv -- "$f" "${f% \(*\).*}"."${f##*.}"; done
請注意,這不是 bash特定的;它應該可以在任何 POSIX shell 中作業。
uj5u.com熱心網友回復:
一個版本使用zmv:
zmv -n '(*) \(*\).mp3' '$1.mp3'
使用-n,此命令會列出將要更改的內容。洗掉-n以實際重命名檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/398483.html
上一篇:如何反轉日期格式
