加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 删除文件夹/文件名的所有前导空格

发布时间:2020-12-16 01:58:44 所属栏目:安全 来源:网络整理
导读:我已经构建了一个命令来删除目录中所有文件夹/文件名的所有前导空格(带子目录). find /dir/* -depth -execdir rename 's/^s+//g' * "{}" ; 它适用于一些小目录(带有一些子目录)但是大型目录需要很长时间.我看到命令执行的次数超过了必要的次数,但我不知道
我已经构建了一个命令来删除目录中所有文件夹/文件名的所有前导空格(带子目录).

find /dir/* -depth -execdir rename 's/^s+//g' * "{}" ;

它适用于一些小目录(带有一些子目录)但是大型目录需要很长时间.我看到命令执行的次数超过了必要的次数,但我不知道为什么.

有人可以建议如何加快速度吗?

/编辑:我使用Debian 8.2作为操作系统.

解决方法

我认为你误解了find的-execdir参数是如何工作的.重命名命令将从包含匹配文件的子目录运行,但仍会为每个匹配的文件调用它.您的重命名参数包含*通配符,因此在每个包含N个文件的子目录中,您将在N ^ 2个文件上调用重命名. (1代表“{}”填写了.)

问题是,我认为你的重命名正则表达式只能起作用*.我认为它实际上不会匹配“{}”部分.

总结(包括上面的评论):

>使用-regex仅查找要重命名的文件.
>使用而不是;分组文件.
>删除通配符*.
>修复重命名正则表达式以对匹配文件的基本名称进行操作(查找将使用./前缀传递路径).

另一种方法可能是查找所有具有以空格开头的文件/文件夹的子目录,然后在这些目录中运行rename *. Gut感觉第一种方法效率更高,但可能取决于匹配文件的数量和分布.

(对不起,我没时间为你写单行内容!)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读