Перемещение файлов по списку...

IT_DED
На сайте с 07.03.2007
Offline
236
994

Всем привет!

Столкнулся с проблемкой... и не могу додумать как решить.

Может есть какой то инструментик в виде проги или скрипта готовый...

В общем суть такая...

Есть куча (несколько мильонов ;) ) файлов... в нескольких папках, различие названия папки только цифра... типа papka1 и papka2

Есть список нужных файлов, которые хочу перенести тоже хитро... в папку, которая присвоена ему в csv файле...

Файл типа такой:

ad;file.jpg

sb;name.jpg

ad;nana.jpg

и так далее... список тоже не маленький...

т.е. file.jpg нужно поместить в папку ad а name.jpg в папку sb

соответственно нужно пройтись по всем папкам papkaN ... и переместить все файлы их списка в папку присвоенную конкретному файлу...

Чую... что задачка простая, но вот увы...

⭐ Рекомендации Дорвейщикам тут - https://in.gl/itded
opaHzheBb1u
На сайте с 26.05.2006
Offline
168
#1

Скрипт на каком языке нужен?

csv файл один или свой для каждой папки?

Файлы с одинаковыми именами могут встречаться в разных папках?

DV
На сайте с 01.05.2010
Offline
644
#2
Думка:
Может есть какой то инструментик в виде проги или скрипта готовый...

Готовый навряд ли, а наваять — обычная задача для администратора. Я бы думал в направлении sh (bourne shell), идеологически самый верный подход.

VDS хостинг ( http://clck.ru/0u97l ) Нет нерешаемых задач ( https://searchengines.guru/ru/forum/806725 ) | Перенос сайтов на Drupal 7 с любых CMS. ( https://searchengines.guru/ru/forum/531842/page6#comment_10504844 )
Sveta Prokopeva
На сайте с 10.05.2006
Offline
99
#3

Вот вариант на php, проверьте хватит ли памяти ) Скрипт работает из любой папки так что можете временно сделать mv в web_secret_directory

<?php
$listfile = fopen('list.csv','rb');
while(!feof($listfile))
{
$row = fgetcsv($listfile, 0, ';');
$list[$row[1]] = $row[0];
if (!is_dir($row[0])) mkdir ($row[0]);
}
fclose($listfile);

$handle = opendir('./');
while ($dir = readdir($handle))
if (strpos($dir, 'papka') !== FALSE)
{
$handle2 = opendir($dir);
while ($file = readdir($handle2))
{
if (isset($list[$file]))
{
rename($dir.'/'.$file, $list[$file].'/'.$file);
}
}
closedir($handle2);
}
closedir($handle);
?>

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