如何删除目录中所有文件中两个数字之间的下划线

如何删除目录中所有文件中两个数字之间的下划线

所以我有一个带有嵌套文件夹的目录,并且在某些时候还有.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'

相关内容