代码之家  ›  专栏  ›  技术社区  ›  NullVoxPopuli

重命名文件夹的最快方法是什么?[关闭]

  •  -2
  • NullVoxPopuli  · 技术社区  · 8 月前

    更新

    基于以下答案 rename ;

    python3 \
      -c "from os import rename; from sys import argv; rename(argv[1], argv[2])" \
      $original $temp
    

    对于这台电脑的情况,似乎是最快的。

    不应该 但我们到了。


    我使用的是macOS Sequoia 15.2,在使用APFS的加密驱动器上。 在虚拟机测试中,加密对这些时间没有可测量的影响,但通过 全局锁定 : https://gregoryszorc.com/blog/2018/10/29/global-kernel-locks-in-apfs/ 是什么减缓了事情的发展。

    openradar也有这个bug报告: https://openradar.me/45648013

    因此,我们必须使用 把戏 删除一些东西,试图变得和ext4或其他合理的文件系统一样快。

    这是我的情况:

    使用 mv :

    ❯ time ( mv node_modules nm )
    
    real    0m7.578s
    user    0m0.001s
    sys 0m0.003s
    

    移动通过 rm

    也就是说,离开存在。

    不管怎样,我的最终目标是删除

    ❯ time ( rm -rf node_modules )
    
    real    0m17.763s
    user    0m0.132s
    sys 0m11.539s
    

    移动通过 rsync

    ❯ time ( rsync -av --delete $(mktemp -d)/ ./node_modules )
    Transfer starting: 1 files
    
    sent 79 bytes  received 26 bytes  70 bytes/sec
    total size is 0  speedup is 0.00
    
    real    0m16.208s
    user    0m0.376s
    sys 0m11.505s
    

    我很惊讶 mv 不是瞬间的——因为它 应该 只是一个inode更新,是吗?

    除了开放雷达问题之外, 似乎其他人已经注意到了这个问题:

    但也许,mac用户通常不会在大型项目中工作?也许他们只是因为“mac很好”才忍受的?不知道事情有多快?idk。这很奇怪。


    @fravadona建议我禁用我的AV。

    一、 事实上。过去情况更糟,糟糕2到4倍。使用的AV是MalwareBytes,并且。。。嗯,恶意软件的名字是对的。。。所以…如果你可以选择AV。。。可能不想要那个。

    这里还有更多软件供我测试:

    • CyberHaven
    • 坎吉ESF

    虽然我无法禁用这些东西(我不拥有正在测试的硬件),但我可以启动macOS VM并运行相同的测试:

    结果如下:

    mv

    time ( mv node_modules nm.bak )
    
    real  0m0.011s
    

    rm -rf

    time ( rm -rf node_modules )
    
    real    0m12.812s
    

    所以…那真是太疯狂了。

    1 回复  |  直到 8 月前
        1
  •  0
  •   Mike Samuel    8 月前

    mv 必须处理不需要的跨物理分区的移动。

    man mv :

    由于rename(2)调用不适用于跨文件系统,mv使用cp(1)和rm(1)来完成移动。

    看看 man 2 rename 例如,python的 os.rename .

    如果发生以下情况,操作可能会失败 src dst 它们位于不同的文件系统上。使用 shutil.move() 以支持移动到不同的文件系统。