Bash

如何刪除目錄中所有文件中兩個數字之間的下劃線

  • November 1, 2021

所以我有一個包含嵌套文件夾的目錄,並且在某些時候有.png圖像。

這些圖片的命名是這樣的“letters_numbers_numbers_letters.png”,我想刪除數字之間的下劃線。

假設我們有一個名為 的文件a_1_2_b.png,我想將其重命名為a_12_b.png. 我知道我必須使用類似的東西:

find . -name "*[0-9]_[0-9]* -type f -exec bash -c <enter_code here>`

但我不確定如何指定如何刪除這個特定的下劃線。請記住,我不想觸及另外兩個下劃線。

提前致謝!

perl使用’s的變體之一rename。例如,使用那個rename類 Debian 系統中的包):

LC_ALL=C find . -name '*[0-9]_[0-9]*' -type f -exec rename -n -d '
 s/(?<=\d)_(?=\d)//g' {} +

(高興時刪除-n(試執行))。

使用zsh,您可以執行以下操作:

autoload -Uz # best in ~/.zshrc
zmv -n  '(**/)(*[0-9]_[0-9]*)(#qD.)' \
       '$1${2//(#m)[0-9][_0-9]#[0-9]/${MATCH//_}}'

它有點複雜,因為在 zsh glob 中沒有 perl 的環視正則表達式運算符。

那些刪除了_每個正常文件名中被數字包圍的所有 s (例如將dir_1_2_3/file_1_2_foo_22_3_4_bar文件重命名dir_1_2_3/file_12_foo_2234_bar為)。

要僅刪除_遵循該letters_digits_digits_letters.png模式的正常文件中的第二個,那就是:

zmv -n '(**/)([[:alpha:]]##_<->)_(<->_[[:alpha:]]##.png)(#qD.)' \
      '$1$2$3'

引用自:https://unix.stackexchange.com/questions/675634