首页 > 解决方案 > 删除bash目录中文件名开头的数字

问题描述

为了重命名前面有数字的目录中的文件,我在脚本中犯了一个错误,因此这发生在错误的目录中。因此,我现在需要从目录中所有文件名的开头删除这些数字。这些范围从 1 到 3 位。我正在使用的电影名称的示例是:

706terrain_Slope1000m_Minimum_all_25PCs_bolt_all_25PCs_qq_bolt.png
680met_sfcWind_all_25PCs_bolt_number.txt
460greenness_NDVI_500m_min_all_25PCs_bolt_number.txt

我正在考虑使用 mv 但我不确定如何在开始时使用不同数量的数字,所以任何建议都将不胜感激!

标签: bashrenamefilenames

解决方案


bash 中的一个简单方法是使用正则表达式测试:

for file in *; do
    [[ -f "${file}" ]] && [[ "${file}" =~ (^[0-9]+) ]] && mv ${file} ${file/${BASH_REMATCH[1]}}
done

这将执行以下操作:

  • [[ -f "${file}" ]]:测试是否file是文件,如果是
  • [[ "${file}" =~ (^[0-9]+) ]]:检查文件是否以数字开头
  • ${file/${BASH_REMATCH[1]}}:file使用BASH_REMATCH匹配正则表达式匹配分组的变量从字符串中删除数字。

推荐阅读