删除文件名开头的数字

删除文件名开头的数字

我希望这会起作用:

$ find . -type f -exec basename {} \; | while EFS= read -r f; do echo "${f##[0-9]}"; done 

但是,例如,对于名为以下的文件:

1foo
11bar

它返回:


1酒吧

什么时候


酒吧

是期待。

PS:最终,我想mv "$f"修改名称(并且还做其他修改)

编辑:

PS2:如果你考虑PS的话,它不是重复的。无论如何,标记为检查的答案令我满意。

答案1

如果rename(有时称为prename)是一个选项:

find . -name '[[:digit:]]*' -type f -exec rename 's:^(.*/)\d+([^/]*)\z:\1\2:s' {} +

解释:

  • ( )括号内的图案被保存,可以通过出现的次数来调用
  • .*/必须保留目录部分
  • ([^/]*)\z: 直到主题末尾的所有非 / 字符。
  • \1\2重新打印捕获的目录以及输出名称中数字后面的所有内容

您可以使用-n中的选项rename进行试运行以首先检查结果。

答案2

find . -type f -exec basename {} \; | while IFS= read -r f; do echo "${f##+([0-9])}"; done应提供所需的结果。

这使用扩展模式匹配运算符,这+()意味着匹配一个或多个。

其他信息可以在 bash 手册页的模式匹配部分找到。

相关内容