Bash
如何刪除目錄中所有文件中兩個數字之間的下劃線
所以我有一個包含嵌套文件夾的目錄,並且在某些時候有
.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'