Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Perl- написать скрипт


Рекомендуемые сообщения

Есть директория, в неё сыпятся файлы, которые генерируются прогой, скрипт на PERL-у должен разбирать их по папочкам в соответствии с датой создания файла. Папки должны формироваться тоже этим скриптом. Можно такое сотворить?

Ссылка на комментарий
Поделиться на другие сайты

перлом можно почти все.

вот пример скрипта который раскладывает по папочкам txt файлы.

по номерам месяца делается папка с буквеным названием, для удобства.

#! c:\perl\bin\perl -wuse strict;use File::Copy;my $sourcepath="c:\\unsort1\\"; #где ищемmy $destpath="c:\\sort1\\"; #куда складываемmy @mounth=('январь','февраль','март','апрель','май','июнь','июль','авгусь','сентябрь','октябрь','ноябрь','декабрь');#месяцы, если требуется удобное раскладываниеsub movetxt {my $pathname=$_[0];opendir (SDIR,$pathname) or die "Can`t open $sourcepath\n";my @sdirlist=readdir(SDIR);close(SDIR);foreach (@sdirlist) {  #print "\>$pathname$_\\\n";  my $file=$_;  if ((-d "$pathname$file")and( $_ !~ /^\./ )) {print "\>$pathname$file\\\n";movewav("$pathname$file\\")}  elsif ($file=~m/^.*?\.txt$/) {			   print "$file\n";			   my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime, $blksize,$blocks) = stat($pathname.$file); 			   my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime($ctime);			   $year=$year+1900;			   $mon=$mon+1;			   if (length($mday)<2){$mday='0'.$mday};			   if (-e "$destpath\\$year\\$mounth[$mon]\\$mday") {}			   else {mkdir("$destpath\\$year\\");mkdir("$destpath\\$year\\$mounth[$mon]\\");mkdir("$destpath\\$year\\$mounth[$mon]\\$mday");};			   move("$pathname$file","$destpath$year\\$mounth[$mon]\\$mday\\$file") or die "Copy failed: $!";				   			};  };};movetxt($sourcepath);

если уточните какие файлы вам надо раскладывать - поправлю.

$mon=$mon+1;

из кода надо конечно убрать, иначе название месяцев съезжает на 1, из за особенностей нумерации элементов массива...

Ссылка на комментарий
Поделиться на другие сайты

спасибо откликнувшимся.

а как вам это решение?

#

!/usr/bin/perl

use strict;

use File::stat;

my $dir = "C:\test";

chdir($dir);

foreach my $filename (glob("*")) {

if (-f $filename) {

my $stat_handle = stat($filename);

my $mtime = $stat_handle->mtime;

my @time = localtime($mtime);

my $date = ($time[3].(1 + $time[4] < 10 ? "0".(1 + $time[4]) : 1+$time[4]).($time[5] < 100 ? $time[5] : $time[5] > 110 ? $time[5] - 100 : "0".($time[5] - 100) ));

mkdir($date);

rename($filename, $date."/".$filename)

}

}

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...