Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сортировка файлов из одной папки в разные папки по датам
 
 автор: Jaivan   (28.01.2009 в 12:37)   письмо автору
 
 

Здравствуйте!
Необходимо написать достаточно простой скрипт для Debian, суть в следующем:
имеется директория с файлами, которые записываются в формате <год-месяц-день-часы:минуты>.<расширение>, например:
2009-01-01-12:00
2009-01-01-13:00
2009-01-02-12:00
2009-01-02-13:00
2009-01-03-12:00
2009-01-03-13:00
нужно эти файлы отсортировать в директории по датам создания, т. е. 2009-01-01, 2009-01-02, 2009-01-03 и тд
Помогите пожалуйста начать реализацию в правильном направлении, чтобы в лес за дровами не ходить )))
Заранее спасибо!

  Ответить  
 
 автор: cheops   (28.01.2009 в 13:16)   письмо автору
 
   для: Jaivan   (28.01.2009 в 12:37)
 

Можно отталкиваться от следующего скрипта
<?php 
  
// Открываем директорию 
  
$dirname "test3/";
  
$dir opendir($dirname); 
  
// В цикле считываем её содержимое 
  
$file = array();
  while((
$fl readdir($dir))) 
  { 
    
// Если текущий объект является файлом - удаляем его 
    
if(is_file($dirname.$fl)) $file[] = $fl
  } 
  
// Закрываем директорию 
  
closedir($dir); 

  
// Если имеется хоть один файл - сортируем массив и 
  // выводим результат
  
if(!empty($file))
  {
    
sort($file);
    echo 
"<pre>";
    
print_r($file);
    echo 
"</pre>";
  }
?> 

  Ответить  
 
 автор: Jaivan   (28.01.2009 в 16:45)   письмо автору
 
   для: cheops   (28.01.2009 в 13:16)
 

можно как нибудь избежать открытия каждого файла функцией fopen?

  Ответить  
 
 автор: Trianon   (28.01.2009 в 17:11)   письмо автору
 
   для: Jaivan   (28.01.2009 в 16:45)
 

где Вы видите здесь открытие функцией fopen?

На самом деле, если у Вас на машине на этом разделе стоит адекватная файловая система (к примеру ReiserFS)), файлы сами собой будут упорядочены.

  Ответить  
 
 автор: Jaivan   (28.01.2009 в 18:08)   письмо автору
 
   для: Trianon   (28.01.2009 в 17:11)
 

C fopen это там мысли в слух ))) пока в итоге получился не замысловатый код, который делает, что нужно (для варианта с windows)

<?php
$path_bgn 
$HTTP_POST_VARS["path_bgn"];
$path_end $HTTP_POST_VARS["path_end"];

if(empty(
$path_bgn)) {
    
$path_bgn 'C:\\date2dir\\';
}
if(empty(
$path_end)) {
    
$path_end 'C:\\date2dir\\test\\';
}
$dir_bgn opendir($path_bgn);
$file = array();
 while((
$fl readdir($dir_bgn))) { 
    
// Если текущий объект является файлом - удаляем его 
    
if(is_file($path_bgn.$fl)) $file[] = $fl;

closedir($dir_bgn);
if(!empty(
$file)) {
    
sort($file);
    echo 
"<pre>";
    
print_r($file);
    echo 
"</pre>";
}
$len sizeof($file);
for(
$i=0;$i<$len;$i++){
    if (
$prev_value != substr($file[$i],0,10)){
        
$newpath $path_bgn.substr($file[$i],0,10);
        
mkdir($newpath);
    }
    
copy($path_bgn.$file[$i],$newpath."\\".$file[$i]);
    
$prev_value substr($file[$i],0,10);
}
?>


я так понимаю грамотней это делать вообще в shell?

  Ответить  
 
 автор: Trianon   (28.01.2009 в 18:26)   письмо автору
 
   для: Jaivan   (28.01.2009 в 18:08)
 

Для варианта с Windows
a) файловая система как правило ntfs, а потому - адекватная
б) файлы с символом двоеточия в имени все равно создать невозможно.

  Ответить  
 
 автор: Jaivan   (29.01.2009 в 11:54)   письмо автору
 
   для: Trianon   (28.01.2009 в 18:26)
 

Скрипт конечно делает, что надо, но необходима реализация в bash...

  Ответить  
 
 автор: Николай2357   (28.01.2009 в 17:16)   письмо автору
 
   для: Jaivan   (28.01.2009 в 16:45)
 

Если я правильно понял, название файла выглядет так: 2009-01-01-12:00.txt ?
В таком случае нужно выделить название и по нему уже сортировать. Получить все названия файлов в дирректории можно этой функцией:
<?
function read_file() 
{              
$dir_file opendir("Ваш_каталог");     
    while(
false !== ($file readdir($dir_file)))  
        if(
$file != '.' && $file != '..')  
        
$files[]= substr($file0strrpos($file'.')); 
return 
$files;                         
}
echo 
implode("<br>",read_file()); 
и отсюда плясать. Только зачем, они и так по порядку...

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования