этим утром мы с моим другом обсудили и написали код ниже. Идея этого скрипта Perl состоит в том, чтобы создать структуру каталогов и скопировать файлы в соответствующий каталог.Почему программа не копирует файлы?
#!/usr/bin/perl
use File::Path;
use File::Copy;
use Path::Class;
use File::Basename qw/dirname/;
my $src = "/Vijay/new.txt";
unless (open(MYFILE, "file1")) {
die ("cannot open input file file1\n");
}
$line = <MYFILE>;
while ($line ne "") {
print ($line);
mkdir_and_copy($src,$line);
$line = <MYFILE>;
}
sub mkdir_and_copy {
my ($from, $to) = @_;
my($directory, $filename) = $to =~ m/(.*\/)(.*)$/;
print("creating dir $directory");
system "mkdir -p $directory";
print("copying file $from to $to");
system "cp -f $from $to";
return;
}
Вышеупомянутый фрагмент кода создает структуру каталогов, но не копирует файлы в соответствующий каталог. Не могли бы вы сообщить нам, где именно мы ошибаемся?
Содержание file1:
test/test1/test2/test.txt
Содержание из new.txt:
Shell/Test/test1/test1.txt
Shell/Test/test2/test2.txt
Shell/Test/test3/test3.txt
Выход:
> ./mypgm.pl
test/test1/test2/test.txt
creating dir test/test1/test2/copying file /Vijay/new.txt to test/test1/test2/test.txt
cp: cannot access /Vijay/new.txt: No such file or directory
>
Каталог Vijay
имеет файл new.txt
с вышеупомянутым содержанием.
Спасибо заранее,
Vijay
Привет всем,
Я только изменил мой код. Пожалуйста, обратитесь к приведенному ниже разделу кода.
#!/usr/bin/perl
use File::Path;
use File::Copy;
use File::Basename qw/dirname/;
my $src = "./Vijay/new.txt";
unless (open(MYFILE, "file1"))
{
die ("cannot open input file file1\n");
}
$line = ;
while ($line ne "")
{
print ($line); print("\n");
mkdir_and_copy($src,$line);
$line = ""; }
sub mkdir_and_copy
{
my ($from, $to) = @_;
my($directory, $filename) = $to =~ m/(.\/)(.)$/;
$temp = $directory.$filename;
print("Creating dirrectory $directory \n");
if(! -d $directory)
{
mkpath($directory) #or die "Failed to create path";
}
printf("From: $from \n");
printf("To: $temp \n");
copy($from,$temp) or die "Failed to Copy";
return;
}
Теперь он создает точную структуру каталогов и копирует файл в соответствующий каталог. Не могли бы вы рассказать мне, правильно ли приведенный выше код?
Почему бы не использовать 'cp -r'? –
Можете вы добавить свой материал? – jkramer
Прочитайте одну или две книги о языке, который вы используете, и, возможно, программировании в целом. Шутки в сторону. В вашем скрипте нет строки, которая написана правильно. Прошу прощения, если этот комментарий причиняет вам боль, но здесь вам нужно улучшить. – msw