bash - 为文件夹中的多个文件重命名并删除 _ 之前的每个字符

标签 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

最佳答案

您可以使用 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"' _ '{}' \;

关于bash - 为文件夹中的多个文件重命名并删除 _ 之前的每个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46447980/

相关文章:

macos - Mac 终端奇怪行为(回车时没有换行符,没有可见文本)

python - 将 glob 命令从 Popen 传递到终端

Bash:选择与模式匹配的上一个命令

linux - 配置 QEMU(Guest Debian-9.0 Sparc64 - Host MacOS High Sierra)从 guest 到主机执行 ssh

command-line - 在 Haskell 命令行应用程序中提示输入密码

linux - 使用 sed 有条件地匹配一个词

ios - Lion(金大师)是 iOS 开发者计划的一部分吗?

c - 在 MacOS 中将字符串返回给 VBA

linux - 如何计算文件夹、其子文件夹和所有 .计数不应包括文件夹计数

shell - 具有历史记录的 zsh 绑定(bind) key