moa*_*eep 3 linux rename files
我有一个目录,其中某些文件名被错误命名something .pdf而不是something.pdf. 是否有一个快速的班轮我可以用来删除文件名中的空格。
我试过了 find -name "* .pdf" -type f | rename 's/ //g'
但这不起作用。
在 zsh 中,这可以通过该zmv函数轻松完成。放入autoload -U zmv你的~/.zshrc,或者在你的 shell 中运行一次,然后:
zmv '* .pdf' '${f// /}'
Run Code Online (Sandbox Code Playgroud)
这将从文件名中删除所有空格。如果您只想删除.pdf扩展名之前的那个:
zmv '* .pdf' '${f# .pdf}.pdf'
Run Code Online (Sandbox Code Playgroud)
或使用括号分隔可用作反向引用的组:
zmv '(*) .pdf' '$1.pdf'
Run Code Online (Sandbox Code Playgroud)
如果您还想在子目录中操作:
zmv '**/* .pdf' '${f# .pdf}.pdf'
Run Code Online (Sandbox Code Playgroud)
或(请注意,您必须使用(**/),而不是(**)/):
zmv '(**/)(*) .pdf' '$1$2.pdf'
Run Code Online (Sandbox Code Playgroud)
Linux下,无论有没有zsh,如果文件名中只有这一个伪空格:
rename \ .pdf .pdf *\ .pdf
Run Code Online (Sandbox Code Playgroud)
或者,如果原始名称中只有这个空格:
rename ' ' '' *\ .pdf
Run Code Online (Sandbox Code Playgroud)
如果您还想在子目录中操作,在 ksh93 ?o+ 或 bash ?4 中,您可以使用**来匹配子目录中的文件。在 bash 中,您需要先运行shopt -s globstar(将此行放在您的~/.bashrc)和set -o globstarksh93 中。
rename \ .pdf .pdf **/*\ .pdf
Run Code Online (Sandbox Code Playgroud)
请注意 bash 在递归目录时遵循符号链接。
没有 的好处**,您可以使用find递归。
find . -name '* .pdf' -exec rename ' .pdf' .pdf {} +
Run Code Online (Sandbox Code Playgroud)
在 Debian 及其衍生产品(包括 Ubuntu)和大多数附带 的非 Linux 系统下perl,该rename命令是不同的,它将 Perl 表达式作为参数而不是要替换的字符串和替换字符串。rename.ul在上面的命令中使用(在 Debian 和衍生产品下),或者与 Perl 一起使用rename:
rename 's/ \.pdf$/.pdf/' -- *\ .pdf # strip the space before the extension
rename 's/ //g' -- *\ .pdf # strip all spaces
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3831 次 |
| 最近记录: |