[identity profile] mx-other.livejournal.com posting in [community profile] useful_faq
Уважаемые,

А нет ли в природе такой программки, которая могла бы УДАЛИТЬ из директории все файлы, которые существуют там только в ОДНОМ экземпляре, и оставить те, которых там по два (с одним и тем же именем, но разными расширениями). Для наглядности:

vasya-0001.abc
vasya-0002.abc
vasya-0002.def

Мне надо, чтобы файл vasya-0001.abc был удалён, а оба файла vasya-0002 остались. Когда файлов 10-20, это легко сделать вручную. Когда их 500-700-1000, это быстро начинает надоедать...

Спасибо!

UPD: Мне подсказали решение, вопрос закрыт! Ещё раз всем спасибо!

Date: 2013-06-20 08:27 pm (UTC)
From: [identity profile] tornader.livejournal.com
php
получаем список.
сортируем.
далее просматриваем. третий? удаляем.
(deleted comment)

Date: 2013-06-20 09:07 pm (UTC)
From: [identity profile] tornader.livejournal.com
там я налажал. правильно так:

  $path = '/path/to/files';
  if ($handle = opendir($path)) {
    while (false !== ($file = readdir($handle))) { 
        $files[] = $file;
    }
    closedir($handle);
	if (count($files) > 0) { 
      asort($files);
  	  $file = $files[0];
	  $cnt = 1;
	  for ($i = 1; $i < count($files); $i++) {
	    if ($file == $files[$i]) {$cnt++;}
		else {$cnt = 0;}
		$file = $files[$i];
		if ($cnt > 2) {unlink($path . '/' . $files[$i]);}
	  }
	}
  }


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

Date: 2013-06-20 09:12 pm (UTC)
From: [identity profile] free-as-freedom.livejournal.com
По-моему, всё ясно - пройтись по всему каталогу и удалить все файлы в одном экземпляре (только с одним расширением). Я так понимаю, что два или больше - нормально.

Date: 2013-06-20 09:15 pm (UTC)
From: [identity profile] tornader.livejournal.com
чушь! я неправильно прочитал задачу.
думал - надо удалять если больше двух!
не исполняйте этот скрипт!!!!!

Date: 2013-06-20 08:30 pm (UTC)
From: [identity profile] free-as-freedom.livejournal.com
Можно написать файл .bat с командой for each.

Date: 2013-06-20 09:12 pm (UTC)
From: [identity profile] dr-trans.livejournal.com
TotalCommander норм работает со списками, хорошо фильтрует. Мало?

Date: 2013-06-20 09:13 pm (UTC)
From: [identity profile] hand-file.livejournal.com
Ваша задача решается средствами файл-менеджеров без написания сценариев и прочих бат-файлов, если, разумеется она точно поставлена.
1. Копируете в 2 каталога (а и б) *.def
2. Удаляете все def из исходного.
3. В каталоге а переименовываете *.def в *.abc
4. Выделяете и вырезаете все файлы из исходного каталога.(или же копируете переносите с переименованием в каталог а, в зависимости от менеджера)
5. Вставляете эти файлы в каталог а. При этом на запрос, что делать с файлами, которые уже есть? отвечаете - ничего, оставить на месте (выбираете опцию - для всех файлов!)
6. Удаляете все из каталога а.
7. То, что необходимо находится в исходном и в Б, соединяете их.
Edited Date: 2013-06-20 09:21 pm (UTC)

Date: 2013-06-20 09:32 pm (UTC)
From: [identity profile] hand-file.livejournal.com
Думаю, любой подойдет. Думаю, это можно проделать и с проводником в виндоуз.
Только внимательнее и осторожнее в части возможной утраты данных при ошибке.

Date: 2013-06-20 10:50 pm (UTC)
From: [identity profile] 0ll-is-matter.livejournal.com
вот, такая же,но додуманная мысль.
А спросившему: ТоталКоммандером имеет большой смысл пользоваться))

Date: 2013-06-21 07:14 am (UTC)
From: [identity profile] hand-file.livejournal.com
Видимо, да, в сравнении с первыми он достаточно навороченный.

Date: 2013-06-21 08:51 am (UTC)
From: [identity profile] karpion.livejournal.com
1. А если файлы большие?

Date: 2013-06-23 09:58 am (UTC)
From: [identity profile] karpion.livejournal.com
А если место на диске закончится?

Date: 2013-06-21 06:07 pm (UTC)
From: [identity profile] hand-file.livejournal.com
Хотите, чтобы я прочитал лекцию по данному вопросу?
Edited Date: 2013-06-21 06:09 pm (UTC)

Date: 2013-06-23 09:45 am (UTC)
From: [identity profile] karpion.livejournal.com
Я как бы намекаю, что трудоёмкость такого алгоритма м.б. слишком большой.

Date: 2013-06-23 06:21 pm (UTC)
From: [identity profile] hand-file.livejournal.com
Я ответил на вопрос, как это сделать без программирования и универсально. Был бы другой вопрос, я бы ответил иначе.