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
答案 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部分。