如何刪除目錄中所有檔案中兩個數字之間的底線

如何刪除目錄中所有檔案中兩個數字之間的底線

所以我有一個帶有嵌套資料夾的目錄,並且在某些時候還有.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>`

但我不確定如何指定如何刪除這個特定的底線。請記住,還有另外兩個底線我不想碰。

先致謝!

答案1

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'

相關內容