Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Помогите дописать скрипт-поиск файлов и запись в..


Автор: tedy1 16.7.2010, 12:20
Сделал скрипт по поиску файлов в одной папке и переносе файлов с определенным расширением в другую папку.  А дальше в тупике (постигаю по тихонечку Perl). Подскажите что надо добавить, чтобы скрипт найдя файл с определенным расширением к примеру txt.  Файлы green.txt перенес в папку green и hello.txt перенес в папку hello и т.д. Спасибо.

Вот мой скрипт:

#!/usr/bin/perl

use File::Copy;

$path_kuda="/1/1";
$path_otkuda="/1/4";

$txt=txt;
$bat=bat;

{
opendir(MDIR,"$path_otkuda") or die "Error.\n";
@files=readdir(MDIR);
closedir(MDIR);
if (scalar(@files)==0)
  {    
  die "No files\n";
   }

for ($j=0;$j <= scalar(@files);$j++)
    {
        if (($files[$j] =~m|.*$txt|i) or ($files[$j] =~m|.*$bat|i))
        {
        copy("$path_otkuda/$files[$j]","$path_kuda");
}}}

Автор: arto 16.7.2010, 12:35
# perl -MFile::Copy -e 'foreach (glob "$ARGV[0]/*.{bat,txt}") { copy $_,$ARGV[1] }' /1/4 /1/1

Автор: tedy1 16.7.2010, 13:07
arto, 

так он просто скопирует в папку /1/1.

А мне надо чтобы исходя из названия файла green.txt скопировал этот файл в папку green, если файл с названием hello.txt в папку hello, как файл называется в такую папку его и помешать....

Автор: arto 16.7.2010, 13:19
perl -MFile::Copy -e 'foreach (glob "$ARGV[0]/*.{bat,txt}") { copy $_,$ARGV[1] . "/" . ( split "[/.]" )[-2] }' /1/4 /1/1

Автор: tedy1 16.7.2010, 13:28
arto, 

Спасибо большое, а как сделать, чтобы green.txt он переписывал в  папку в green, но название файла изменял на txt1?

Автор: arto 16.7.2010, 13:42
50€/hour

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)