【问题标题】:How to strip filenames after first character / underscore and rename如何在第一个字符/下划线和重命名后去除文件名
【发布时间】:2019-09-30 21:32:42
【问题描述】:

我有一个文件名格式如下的目录:

DAM3D002_P_DAPedit.jpg

我需要将所有文件名重命名为:

DAM3D002.jpg

我正在使用 Linux/Ubuntu 18.04

这是我在 bash 上尝试过的:

for f in *.jpg; do mv "$f" "${f%_*.jpg}.jpg" ; done

我期望输出:

DAM3D002.jpg

但我得到了:

DAM3D002_P.jpg

【问题讨论】:

  • 你需要"${f%%_*.jpg}.jpg"

标签: bash shell replace substring


【解决方案1】:

你可以使用

for f in *.jpg; do mv "$f" "${f%%_*.jpg}.jpg"; done

10.1. Manipulating Strings:

${string%%substring}
$stringback 中删除 $substring 的最长匹配项。

noted by l'L'l 一样,如果您的*.jpg 文件名可能不包含下划线,上述解决方案将在文件名末尾添加第二个.jpg。如果不希望这样做,请使用

for f in *.jpg; do echo "${f/_*.jpg/.jpg}"; done    

Online test:

files=(1.jpg 1_2.jpg 1_2_3.jpg /a/b/c/1_2_3.jpg)
for f in "${files[@]}"; do echo "${f/_*.jpg/.jpg}"; done

输出:

1.jpg
1.jpg
1.jpg
/a/b/c/1.jpg

【讨论】:

  • 这种方法的问题是,如果有任何jpg 文件没有下划线,它会将名称更改为file.jpg.jpg。使用${f/_*.jpg/.jpg} 可能会更好。
猜你喜欢
  • 2012-11-28
  • 1970-01-01
  • 2016-04-02
  • 2013-09-05
  • 2016-05-11
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-05
相关资源
最近更新 更多