gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 09:15:09 25 4
gpt4 key购买 nike

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

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

它在一些小目录(带有一些子目录)中有效,但在大目录中花费了非常的时间。我看到该命令的执行次数超出了必要的次数,但我不知道为什么。

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

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

最佳答案

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

问题是,我认为您的 rename 正则表达式只因为 * 才有效。我认为它实际上不会匹配 "{}" 部分。

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

  1. 使用 -regex 只查找您要重命名的文件。
  2. 使用 + 而不是 ; 对文件进行分组。
  3. 删除通配符 *
  4. 修复 rename 正则表达式以对匹配文件的基本名称进行操作(find 将传递带有 ./ 前缀的路径)。

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

(抱歉,我没有时间真正为你写一行!)

关于bash - 删除文件夹/文件名的所有前导空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34426579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com