Для начала я знаю, что есть библиотека 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";
«test1» является каталогом, который содержит файл и каталог, который содержит файл (все они имеют уникальные имена). «test2» - это пустой, но существующий каталог.
Когда я запускаю это, я получаю сообщение об ошибке «test1/..» и «test2/..» идентичны (не скопированы) в rec_cpy.pl строке 26 », что имеет смысл (поскольку оба они уже существуют и уже имеют «..» в них). Однако, когда я открываю test2, каталог из test1 копируется как каталог, а не как файл, но «itried» создается как каталог без проблем. Что происходит?
В зависимости от лицензирования вы можете просто включить код в свой проект или загрузить его и вручную установить в подпапку вашего проекта (например, в папку 'lib /'). – oldtechaa
Это, вероятно, то, что я собираюсь закончить, но я все еще смущен, почему мой код определяет каталог как файл. – QuillAndSaber