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

我已经构建了一个命令来删除目录中所有文件夹/文件名的所有前导空格(带子目录).

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

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

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

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

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

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

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

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

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

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

点赞