1
首先,我知道有一個庫File :: Copy :: Recursive具有相同的功能。不幸的是,我目前正在一個服務器上工作,在那裏我沒有安裝庫的自由,並且說服那些不可行的人。複製目錄及其所有內容的功能?
我想寫一個函數,它將複製一個目錄的所有內容,包括子目錄及其內容到一個新的空目錄。這裏是我完整的代碼現在:
#!/usr/bin/perl
use File::Copy;
# To use: rec_cpy (sourcedir, destdir)
sub rec_cpy {
my $sourcedir = $_[0];
my $destdir = $_[1];
# open the directory
opendir(DIR, $sourcedir) or die "Failed to open $sourcedir\n";
my @files = readdir(DIR);
closedir(DIR);
# iterate over contents of directory
foreach my $filename (@files) {
if(-d $filename && $filename ne "." && $filename ne "..") {
# if a subdirectory, make the directory and copy its contents
mkdir "$destdir/$filename";
rec_cpy("$sourcedir/$filename","$destdir/$filename");
}
else {
# if anything else, copy it over
copy ("$sourcedir/$filename","$destdir/$filename");
}
}
return;
}
rec_cpy("test1", "test2");
mkdir "itried";
「測試1」是包含一個文件和目錄,其中包含一個文件(都具有唯一的名稱)的目錄。 「test2」是一個空的但現存的目錄。
當我運行這個時,我得到一個錯誤「'test1/..'和'test2/..'在rec_cpy.pl第26行相同(不復制)」,這是有道理的(因爲它們都已經存在並已在其中有「..」)。但是,當我打開test2時,test1中的目錄複製爲一個目錄,而不是作爲文件,但「itried」被創建爲一個沒有問題的目錄。這是怎麼回事?
根據許可證,您可以將代碼包含在您的項目中,或者您可以下載它並手動安裝到項目的子文件夾中(例如'lib /'文件夾)。 – oldtechaa
這可能是我最終要做的事情,但我仍然對爲什麼我的代碼將該目錄檢測爲文件感到困惑。 – QuillAndSaber