我有一个目录,其中一些文件名被错误地命名为.pdf而不是something.pdf.是否有一个快速的单行程序,我可以用来删除文件名中的空格.
我试过找-name“* .pdf”-type f |重命名’s / // g’
但这没用.
解决方法:
在zsh中,使用zmv功能可以轻松完成.将autoload -U zmv放在〜/ .zshrc中,或者在shell中运行一次,然后:
zmv '* .pdf' '${f// /}'
这将从文件名中删除所有空格.如果您只想删除.pdf扩展名之前的那个:
zmv '* .pdf' '${f# .pdf}.pdf'
或使用括号分隔可用作反向引用的组:
zmv '(*) .pdf' '$1.pdf'
如果您还想在子目录中执行操作:
zmv '**/* .pdf' '${f# .pdf}.pdf'
或(注意你必须使用(** /),而不是(**)/):
zmv '(**/)(*) .pdf' '$1$2.pdf'
在Linux下,有或没有zsh,如果文件名中只有一个虚假空间:
rename \ .pdf .pdf *\ .pdf
或者,如果原始名称中只有这一个空格:
rename ' ' '' *\ .pdf
如果您想在子目录中执行操作,在ksh93≥o或bash≥4,您可以使用**来匹配子目录中的文件.在bash中,你需要首先运行shopt -s globstar(把这行放在〜/ .bashrc中)并在ksh93中设置-o globstar.
rename \ .pdf .pdf **/*\ .pdf
请注意,在递归目录时,bash会遵循符号链接.
没有**的好处,你可以使用find来递归.
find . -name '* .pdf' -exec rename ' .pdf' .pdf {} +
在Debian和衍生产品(包括Ubuntu)以及与perl一起提供的大多数非Linux系统下,rename命令是一个不同的命令,它将Perl表达式作为参数而不是要替换的字符串和替换字符串.在上面的命令中使用rename.ul(在Debian和衍生物下),或者使用Perl重命名:
rename 's/ \.pdf$/.pdf/' -- *\ .pdf # strip the space before the extension
rename 's/ //g' -- *\ .pdf # strip all spaces
标签:linux,rename,files
来源: https://codeday.me/bug/20190814/1653188.html