1

我对 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); 
4

2 回答 2

3

是的。在 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(符号链接)访问。
于 2012-08-15T13:54:58.630 回答
0

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

于 2012-08-15T13:38:01.173 回答