【发布时间】:2016-03-29 08:26:01
【问题描述】:
我已经构建了一个命令来删除一个目录(带有子目录)中所有文件夹/文件名的所有前导空格。
find /dir/* -depth -execdir rename 's/^\s+//g' * "{}" \;
它适用于一些小目录(带有一些子目录),但对于大目录则需要 非常 长时间。我看到命令执行的次数超出了必要的次数,但我不知道为什么。
有人可以建议如何加快速度吗?
/edit:我正在使用 Debian 8.2 作为操作系统。
【问题讨论】:
-
您可能需要调整 find 命令以仅返回以空格开头的名称。除非我遗漏了什么,否则您当前正在重命名所有文件。
-
使用
+代替\;以便它执行rename命令(即基于Perl 的rename)对一组文件执行一次,而不是每个文件执行一次文件。 (另外,正如 Richard St-Cyr 指出的那样,不要尝试重命名不需要重命名的文件或目录。) -
@RichardSt-Cyr 感谢您的建议。我以为我的 find 命令只会到达 /dir 中的每个目录,然后访问所有子目录,然后在其中执行我的重命名命令。我是否误解了 find 的工作原理? oO JonathanLeffler 是的,它的珍珠重命名命令。嗯,好的,那么我需要对 find 的工作原理进行更多研究。我虽然它会打开一个文件夹,执行命令然后打开下一个文件夹......令人困惑^^感谢你们的帮助:)
标签: bash shell find batch-rename