微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

正则表达式重命名所有文件递归删除字符“?”命令行后的所有内容

我有一系列文件,我想使用* nix系统上提供的命令行工具进行清理.现有文件名称如此.

filecopy2.txt?filename=3
filecopy4.txt?filename=33
filecopy6.txt?filename=198
filecopy8.txt?filename=188
filecopy3.txt?filename=19
filecopy5.txt?filename=1
filecopy7.txt?filename=5555

我希望它们被重命名删除所有字符,包括“?”.

filecopy2.txt
filecopy4.txt
filecopy6.txt
filecopy8.txt
filecopy3.txt
filecopy5.txt
filecopy7.txt

我相信以下正则表达式会抓住我想从名称删除的位,

\?(.*)

我无法弄清楚除此之外如何完成这项任务.

解决方法:

如果所有文件都在同一目录中(忽略.dotfiles):

$rename -n 's/\?filename=\d+$//' -- *

如果要在目录层次结构中递归重命名文件

$find . -type f -exec rename -n 's/\?filename=\d+$//' {} +

删除-n选项,进行重命名.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐