我有一個腳本,它創建一個新目錄,然後遍歷不同(源)目錄的所有內容,並在新目錄中創建鏈接到每個元素源目錄。腳本的相關部分是:Perl -e文件測試無法識別無效鏈接
use strict;
use warnings;
use Getopt::Long;
use Cwd 'getcwd';
use Cwd 'realpath';
#...
opendir ($LC, $source_dir) or die "Cannot open directory: '$source_dir': $!";
while ($entry = readdir $LC) {
next if $entry =~ /\A\.\.?\z/;
print "-I- Creating a link $entry\n";
system "ln -s ".realpath("${source_dir}/${entry}")." ${new_dir}/$entry";
die "-E- couldn't create link ${new_dir}/$entry ... exiting.\n" unless -e "${new_dir}/$entry";
}
closedir $LC;
#...
當源目錄中的某個文件是死鏈接時,就會出現問題。命令ln
在新目錄中創建一個名爲/new_dir/dead_link
的文件,它鏈接到/source_dir/deal_link
,但由於/source_dir/deal_link
鏈接到一個不存在的文件,因此-e
命令將/source_dir/deal_link
識別爲不存在並調用die
命令。
運行ls -ltr /new_dir/dead link
給出:
lrwxrwxrwx 1 user ttt 44 Dec 7 07:40 /new_dir/dead_link -> /source_dir/dead_link
我怎麼能這樣做,如果該文件存在,無論它鏈接到-e
將只檢查?
那爲什麼說這個文件不存在,而ls表示存在? – SIMEL 2014-12-07 14:10:18
@mpapec,請參閱編輯。另外,除非(-e「$ {source_dir}/$ {entry}」);'添加行'next'會導致循環跳過死鏈接,並且不會嘗試複製它(這不是我所需要的,我需要目錄是相同的)。 – SIMEL 2014-12-07 14:14:07
你見過'-l' – 2014-12-07 14:16:09