linux删除文件名中的空格,linux – 删除目录中文件名中的空格

我有一个目录,其中一些文件名被错误地命名为.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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值