如何优化 Perl 中的符号链接删除?

sbk*_*sbk 2 perl file-io symlink perl-module directory-traversal

我正在编写一个 Perl 脚本来删除目录中的符号链接,并且我注意到当前使用 find 命令的方法需要花费相当多的时间。我正在寻找更有效的解决方案。

这是当前的代码片段:

system("find '$dir' -type l -exec rm -f {} \\;");
Run Code Online (Sandbox Code Playgroud)

我还尝试了使用 unlink 和 glob 的替代方案:

unlink glob("$dir/*") if -e $dir;
Run Code Online (Sandbox Code Playgroud)

然而,这两种方法似乎都有其缺点,我想知道是否有更优化的方法来实现 Perl 中的符号链接删除。

  1. 我可以对 find 命令应用任何特定的优化吗?
  2. 是否有更有效的仅 Perl 解决方案来删除目录中的符号链接?
  3. 是否有专门用于目录遍历和链接操作的 Perl 模块可以提高性能?

任何有关优化删除过程的见解或建议将不胜感激。谢谢你!

附加信息:

  • 目录 ($dir) 通常包含大量符号链接。
  • 我愿意使用 Perl 模块或可能提供更好性能的替代方法。
  • 性能基准或示例将特别有帮助。

Sha*_*awn 5

无需将诸如find和 之类的外部进程拖入rm其中。File::Find该任务可以纯粹在 perl 中使用遍历目录树来完成:

#!/usr/bin/env perl
use warnings;
use strict;
use File::Find;

my $dir = ...; # Fill in the blanks

find(sub { unlink $_ if -l $_ }, $dir);
Run Code Online (Sandbox Code Playgroud)

  • 关于“*任务可以纯粹用 perl 完成*”,当然,但问题是做得更快。 (2认同)