Подскажите скрипт php выборки файлов

[Удален]
1318

Здравствуйте!

В общем суть такая, есть папка в которой хранится порядка 500000 файлов, есть список .txt с названием всех файлов.

Я создал список из 5000 файлов, и мне нужен скрипт, который бы нашел все файлы из этого списка и скопировал в отдельную папку.

В идеале, нужен скрипт, который бы мог брать список необходимых файлов из excel по следующему алгаритму:

Берем строку в excel, из первого столбца выбираем "название файла в общей папке", из второго столбца "новое название файла", ищем файл в общей папке, и сохраняем его в новой папке под названием "новое название файла"

Подскажите, есть у кого что-нибудь подобное?

Jekyll
На сайте с 04.05.2009
Offline
136
#1
birseo:
мне нужен скрипт, который бы нашел все файлы из этого списка и скопировал в отдельную папку.

Вот этот скрипт должен работать:

<?php


$list = file( "list.txt" ); // список с именами
$from = 'from_dir'; // папка откуда копировать
$to = 'to_dir'; // папка куда копировать
$s = count($list);

for ($i=0; $i<$s; $i++) copy($from.'/'.$list[$i], $to.'/'.$list[$i]);

?>

C excel никогда не работал, возможно кто-то доведёт до именно того что вам нужно

[Удален]
#2

Благодарю! На начальном этапе этого хватит!

Если кто знает, как с excel сделать, отпишите пожалуйста!

arkadiy_a
На сайте с 11.06.2008
Offline
82
#3
birseo:

Берем строку в excel, из первого столбца выбираем "название файла в общей папке", из второго столбца "новое название файла", ищем файл в общей папке, и сохраняем его в новой папке под названием "новое название файла

Это просто, есть использовать экспорт в csv.

Сначала сохраняете таблицу в виде трех колонок: первая вся запoлнная словом copy (cp если будете копировать в юниксах) по вертикали, вторая что копируем, третья - куда. Итого три колонки. Экспортируете в csv, получившийся текстовый файл затем открываете в wordpad, notepad++ или подобном редакторе, делаете массовую замену запятой на пробел.

Затем csv переименовываем в .bat или .cmd и запускаем.

E3
На сайте с 20.12.2010
Offline
18
#4
birseo:
Если кто знает, как с excel сделать, отпишите пожалуйста!

Если прям нужно из екселя тянуть, то так....

Открытие ранее созданного документа:
Открытие документа можно сделать при помощи метода Open() объекта Workbooks().
В передаваемом методу Open() параметре нужно указать имя открываемого файла:

<?php
$xls = new COM("Excel.Application"); // Создаем новый COM-объект
$xls->Application->Visible = 1; // Заставляем его отобразиться
$xls->Workbooks->Open("C:\test.xls"); // Открываем ранее сохраненный документ
?>

Если указать не полный а относительный путь, то поиск открываемого файла будет происходить не на сервере а на компьютере пользователя (по умолчанию это папка "Мои документы").

пруф

LD
На сайте с 14.03.2011
Offline
0
#5
birseo:
Благодарю! На начальном этапе этого хватит!

Если кто знает, как с excel сделать, отпишите пожалуйста!

с экселем лучше экспорт в csv, это как минимум будет более гибкое решение,

работа через COM может быть недоступна на Linux\FreeBSD\*, такая возможность (работа с COM) только под Windows прокатит хорошо и то, если Microsoft Office стоит

Делаете Экспорт в csv, указывайте нужный символ в качестве разделителя, рекомендуется ";"

а дальше как обычно

<?php

$dir_from='dir';
$dir_to='dir2';
if(!is_writable($dir_to)die('Невозможна запись в папку '.$dir_to);
//открываем данный файл
$file=file("file.csv");
$file_count=count($file);
for($i=0;$i<$file_count;$i++)
{// ; - тот самый разделитель в файле csv
$file[$i]=trim($file[$i]);
$arr=explode(';',$file[$i]);
// получаем в зависимости от столбцов - 1 столбец в Вашем случае имя файла до переименовывания, 2 столбец - после
$file_from=$dir_from.'/'.$arr[0];
if(file_exists($file_from))
{
//запускаем проверку - а всё ли правильно, нет ли косяков, после проверки убираем комментирование у "copy"
echo 'Файл: '.$file_from.', теперь: '.$dir_to.'/'.$arr[1];
//copy($file_from,$dir_to.'/'.$arr[1]);
}
}
?>

//пардон если где синтаксические ошибки, а функционал можно расширять и расширять, например проверка что все файлы были скопированы и т.д.

[Удален]
#6

Спасибо всем, особенно LiveDew!

Все получилось, работает отлично! :)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий