你可以在Perl中对一个目录及其所有内容进行符号链接吗?

时间:2012-08-15 13:33:45

标签: perl unix symlink

我是Perl的新手,并且已经找到了如何使用符号链接文件。你也可以用目录吗?我想在某个目录和一个或多个其他目录之间建立符号链接,因此如果我在原始目录中编辑文件,则更改将在符号链接目录中更新。这可能吗?

编辑:我的Perl代码用于为给定目录中的文件创建符号链接。

由于

#!/usr/bin/perl

$fileDirectory = "/home/Alan/Perl/Files/";
$symLinkDirectory = "/home/Alan/Perl/SymFiles/";

opendir ( DIR, $fileDirectory ) || die "Error in opening directory $fileDirectory\n";

while( ($fileName = readdir(DIR))){
    my $filePath = $fileDirectory.$fileName;
    symlink("$filePath","$symLinkDirectory".$fileName);
}

closedir(DIR); 

2 个答案:

答案 0 :(得分:2)

是。在Unix文件系统上,当您操作目录路径以实际上是另一个目录的符号链接的前缀开头的文件时,文件操作将自动发生在作为符号链接目标的目录中。

这包括“在符号链接路径上”完成的写操作,它实际上对真实文件生效;以及在符号链接路径中可见的原始目录路径中的文件上执行的写操作。

这与Perl无关,但显然也适用于Perl:

$ perl5.8 -e 'symlink("/HOME/dir1","/HOME/dir2"); 
              use File::Slurp qw(write_file); 
              write_file("/HOME/dir2/myfile", "File lives in dir1\n"); 
              write_file("/HOME/dir1/myfile2","File visible in dir2 too\n");'

$ ls -l /HOME/dir1
total 1
-rw-rw-r--+ 1 USER users 4 Aug 15 09:56 myfile
-rw-rw-r--+ 1 USER users 4 Aug 15 09:56 myfile2

$ ls -l /HOME/dir2
lrwxrwxrwx 1 USER users 22 Aug 15 09:56 /HOME/dir2 -> /HOME/dir1/

$ ls -l /HOME/dir2/myfile2
-rw-rw-r--+ 1 USER users 4 Aug 15 09:56 /HOME/dir2/myfile2

$ ls -l /HOME/dir1/myfile
-rw-rw-r--+ 1 USER users 4 Aug 15 09:56 /HOME/dir1/myfile
  • 我有一个真实的目录dir1
  • 我将dir2符号链接到dir1
  • 我在dir2创建了一个文件,但实际上它是在dir1中创建的
  • 我在dir1中创建了另一个文件。它也可以通过dir2(符号链接)访问。

答案 1 :(得分:0)

符号链接取决于文件系统。在Linux文件系统中,通常可以使用目录的符号链接。符号链接不是副本/备份,它们只是一个真实文件/目录的快捷方式。