如何从 bash 中的多个文件名中删除通用前缀模式
How to remove a common prefix pattern from multiple file names in bash
我需要重命名数千个文件,现在我正在删除前 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" 出现之前 trim 一切似乎是最简单的,但我不知道如何做到这一点。带有循环的东西可以用作 bash 脚本会很棒。
${VAR#*-*- }
按模式删除前缀。这是使用 shell 变量 VAR 中的文本,并根据删除与通配符模式 *-*-
匹配的前缀生成字符串 - 例如任何字符,然后是破折号,然后是任何字符,然后是第二个破折号和 space
为了在循环中获取文件名,您可以使用 bash for
和模式
for VAR in *.txt; do mv "$VAR" "${VAR#*-*- }"; done
在 mv
中引用是必要的,以防止文件名中的白色 space 被 shell
分割成多个参数
你可以使用 cut -d"-" -f3
:
for VAR in *-*-*.txt; do mv "$VAR" "`echo $VAR | cut -d'-' -f3 `"; done
或者,忽略第一个 space:
for VAR in *-*-*.txt; do mv "$VAR" "`echo $VAR | sed -e 's/^.*- //g'`"; done
我需要重命名数千个文件,现在我正在删除前 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" 出现之前 trim 一切似乎是最简单的,但我不知道如何做到这一点。带有循环的东西可以用作 bash 脚本会很棒。
${VAR#*-*- }
按模式删除前缀。这是使用 shell 变量 VAR 中的文本,并根据删除与通配符模式 *-*-
匹配的前缀生成字符串 - 例如任何字符,然后是破折号,然后是任何字符,然后是第二个破折号和 space
为了在循环中获取文件名,您可以使用 bash for
和模式
for VAR in *.txt; do mv "$VAR" "${VAR#*-*- }"; done
在 mv
中引用是必要的,以防止文件名中的白色 space 被 shell
你可以使用 cut -d"-" -f3
:
for VAR in *-*-*.txt; do mv "$VAR" "`echo $VAR | cut -d'-' -f3 `"; done
或者,忽略第一个 space:
for VAR in *-*-*.txt; do mv "$VAR" "`echo $VAR | sed -e 's/^.*- //g'`"; done