对于文件夹中的多个文件,重命名并删除_之前的每个字符

时间:2017-09-27 12:33:28

标签: bash macos command-line terminal

I found this post here,它可用于删除空格后的所有内容,但我无法对其进行反向工程,以便在文件夹中批量删除下划线及其前面的所有内容。提到的帖子的终端线是

find . -type f -name "* *" -exec bash -c 'f="$1"; s="${f/_ / }"; mv -- "$f" "${s/ *./.}"' _ '{}' \;

所以我需要它作为下划线而不是空格,我需要它在角色之前删除而不是之后。例如。如果文件名为:

random text _987media.mp4

我希望它被命名为:

987media.mp4

2 个答案:

答案 0 :(得分:3)

您可以使用bash-internal parameter pattern substitution

$ f='random text _987media.mp4'
$ echo "${f/*_/}"
987media.mp4

删除最后一个下划线之前的所有内容,包括下划线。

要批量重命名包含_的所有文件:

find . -type f -name "*_*" -exec bash -c 'f="$1"; g="${f/*_/}"; mv -- "$f" "$g"' _ '{}' \;

答案 1 :(得分:1)

只需修改您的答案即可使用参数扩展来删除子字符串。

find . -type f -name "* *" -exec bash -c 'f="$1"; s="${f##*_}"; mv -- "$f" "$s"' _ '{}' \;

应该足够了。部分{f##*_}会删除字符串中的部分,直到文件中的最后一个_。有关更多示例,请参阅此substring removal部分。