我已经建立了一个命令来删除目录中所有文件夹/文件名的所有前导空格(带子目录)。
find /dir/* -depth -execdir rename 's/^\s+//g' * "{}" \;
它适用于一些小目录(包含一些子目录),但对于大型目录,它的长度非常。我看到命令执行的次数超过了必要的次数,但我不知道为什么。
有人可以建议如何加快速度吗?
/ edit:我正在使用Debian 8.2作为操作系统。
答案 0 :(得分:1)
我认为您误解了-execdir
的{{1}}参数是如何工作的。 find
命令将从包含匹配文件的子目录运行,但仍会为每个匹配的文件调用它。您的rename
参数包含rename
通配符,因此在每个包含N个文件的子目录中,您将在N ^ 2个文件上调用*
。 (由rename
填写的"{}"
为+1。)
问题是,我认为您的find
正则表达式仅适用于rename
。我认为它实际上不会匹配*
部分。
总结(包括上面的评论):
"{}"
仅查找要重命名的文件。-regex
代替+
对文件进行分组。;
。*
正则表达式以对匹配文件的基本名称进行操作(rename
将传递find
前缀的路径。另一种方法是找到所有子目录,这些子目录具有以空格开头的文件/文件夹,然后在这些目录中运行./
。 Gut感觉第一种方法效率更高,但可能取决于匹配文件的数量和分布。
(对不起,我没时间为你写一行内容!)