我有两个源目录和目标目录,我需要查找如何创建从源路径到目标路径的相对链接

时间:2019-07-01 07:15:43

标签: perl

我有两个目录,其中有源和目标

例如,

  • /nfs/edu/lib/etc/sim/win ---这是我的目的地
  • /nfs/edu/lib/etc/ket/ops/nis ----这是源文件

我已经尝试过Perl的abs2rel函数来从源代码转换上面的relpath,但是它没有给出确切的答案,而是给了我 ../../../../sim/win-这是我现在得到的输出

my $rel_path = File::Spec->abs2rel( $modules_dir ,$project_dir) ;

项目目录为源,模块目录为目标

我需要创建从源到目标的相对路径。 我的输出应该像../../../sim/win一样-这是从源到目的地的。

1 个答案:

答案 0 :(得分:1)

这就是我认为您的程序是

use v5.10;
use File::Spec;

my $modules_dir = "/nfs/edu/lib/etc/sim/win";
my $project_dir = "/nfs/edu/lib/etc/ket/ops/nis";

my $rel_path = File::Spec->abs2rel( $modules_dir, $project_dir );
say $rel_path;

输出就是您想要的:

../../../sim/win

但是,您没有提供实际运行的程序,因此我们不希望看到为什么您得到不同的答案。始终张贴演示该问题的最小,完整和实际的代码。

但是,我怀疑您正在以错误的方式处理此问题。通常,我宁愿使用绝对路径而不是相对路径。如果我知道绝对路径,那么我将始终知道前进的方向。如果我有相对路径,我还必须知道(也许不断调整)当前的工作目录。

例如,在此程序中,我可以位于所需的任何目录中,但仍将文件移到正确的位置:

use v5.10;
use File::Spec;

my $modules_dir = "/nfs/edu/lib/etc/sim/win";
my $project_dir = "/nfs/edu/lib/etc/ket/ops/nis";

my $file = "some_library.pl";

my $source = File::Spec->catfile( $project_dir, $file );
my $dest   = File::Spec->catfile( $modules_dir, $file );

rename $source => $dest or warn "Could not rename file: $!";