删除 zsh 中的所有扩展

删除 zsh 中的所有扩展

假设我有一个目录,里面有许多带有 .bak 扩展名的文件,我想从每个文件中删除这个文件。最简单的方法是什么?我的意思是一个可以执行人们可能期望的命令mv *.bak *

答案1

zmv

Zsh 有zmv,它提供了一个非常简单的界面来重命名(或复制)文件:

autoload zmv
zmv '(*).bak' '$1'

每一对括号捕获一个组,然后可以使用$1$2等进行访问。以下是更多例子

另一种方法zmv是使用-W适用于简单重命名任务的选项:

zmv -W '*.bak' '*'

使其始终可用的最简单方法zmv是将autoload zmv声明放在您的 中~/.zshrc


使用 Bash 语法

如果您想使用“普通”的 Bash 语法进行字符串操作,可以这样做:

for f in *.bak; do mv -- "$f" "${f%.bak}"; done

使用rename工具

在某些 Linux 和 OS X 上,有一个rename工具可以通过brew install rename

rename 's/.bak$//' *

需要$捕获字符串的结尾,而不是恰好包含的文件名中间的部分.bak

答案2

除了给出的精彩答案之外,还有非常这种方法比较老式,可以在任何兼容 POSIX 的系统上运行 — — 即使没有像 bash 或 zsh 这样的现代 shell:

for f in *.bak; do mv $f `echo $f | sed -e 's/\.bak$//'`; done

相关内容