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

时间:2015-12-23 00:07:18

标签: bash shell find batch-rename

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

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

它适用于一些小目录(包含一些子目录),但对于大型目录,它的长度非常。我看到命令执行的次数超过了必要的次数,但我不知道为什么。

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

/ edit:我正在使用Debian 8.2作为操作系统。

1 个答案:

答案 0 :(得分:1)

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

问题是,我认为您的find正则表达式仅适用于rename。我认为它实际上不会匹配*部分。

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

  1. 使用"{}"仅查找要重命名的文件。
  2. 使用-regex代替+对文件进行分组。
  3. 删除通配符;
  4. 修复*正则表达式以对匹配文件的基本名称进行操作(rename将传递find前缀的路径。
  5. 另一种方法是找到所有子目录,这些子目录具有以空格开头的文件/文件夹,然后在这些目录中运行./。 Gut感觉第一种方法效率更高,但可能取决于匹配文件的数量和分布。

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