如何从bash中的多个文件名中删除公共前缀模式[重复]

Posted

技术标签:

【中文标题】如何从bash中的多个文件名中删除公共前缀模式[重复]【英文标题】:How to remove a common prefix pattern from multiple file names in bash [duplicate] 【发布时间】:2016-07-20 05:03:48 【问题描述】:

我需要重命名数千个文件,现在我正在删除前 x 个字符,但这可能是一个漫长的过程,因为需要删除的字符数会发生变化。

源文件命名如下:

4023 - 23 - Animal, crocodile 4 legs.txt 
243 - 4 - Animal, dog 4 legs.txt 
5450 - 2 - Animal, bird 2 legs.txt

改名:

Animal, crocodile 4 legs.txt
Animal, dog 4 legs.txt
Animal, bird 2 legs.txt

似乎最简单的方法是在“A”出现之前修剪所有内容,但我不知道该怎么做。带有可用作 bash 脚本的循环的东西会很棒。

【问题讨论】:

【参考方案1】:

您可以使用bash parameter expansion

$VAR#*-*-

按模式删除前缀。那是使用 shell 变量 VAR 中的文本并根据删除与通配符模式 *-*- 匹配的前缀生成一个字符串 - 例如任何字符,然后是一个破折号,然后是任何字符,然后是第二个破折号和一个空格

为了在循环中获取文件名,您可以使用带有模式的 bash for

for VAR in *.txt; do mv "$VAR" "$VAR#*-*- "; done

mv 中的引用是必要的,以防止文件名中的空格被 shell 拆分为多个参数

【讨论】:

【参考方案2】:

你可以使用cut -d"-" -f3:

for VAR in *-*-*.txt; do mv "$VAR" "`echo $VAR | cut -d'-' -f3 `"; done

或者,忽略第一个空格:

for VAR in *-*-*.txt; do mv "$VAR" "`echo $VAR | sed -e 's/^.*- //g'`"; done

【讨论】:

以上是关于如何从bash中的多个文件名中删除公共前缀模式[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何从bash中的ispell .mwl文件中提取所有前缀词

根据 Bash 中的模式更改目录名称

从文件名中批量删除“@2x”的 Bash 脚本/命令(视网膜图像 -> 正常)

在 Unix 中根据模式重命名多个文件

重命名文件夹中的多个文件,添加前缀 (Windows)

在 laravel 中更新时如何删除公共/文件夹中的多个图像?