LINUX.ORG.RU

inotifywait и число срабатываний

 ,


0

2

Всем привет. Глубоко не копал, но интересует такой момент в этом звере, как переменная числа срабатываний.
Задача такова. В каталог «A» попадает «некоторый файл с пробелами.jpg. inotifywait сидит с параметром close_write и, если таковой файл попадает и в него закачивается и закрывается запись, к файлу спереди дописывается некий номер. Из имени самого файла делается такое же имя каталога в другой директории и сам файл помещается в такую директорию с именем „число срабатывания inotifywait_некоторый файл с пробелами.jpg“.
Создание каталога с таким же именем делается не потому, что непонятно, как обходить файлы, которые уже были обработаны, а что бы файлы с изначально одинаковыми именами не разбрасывались за счет номеров срабатываний („0001_некоторый файл с пробелами.jpg“, 0002_другой файл.jpg, „0003_некоторый файл с пробелами.jpg“...).
Но, собственно, вопрос - а ведет ли „inotifywait“ счет своим действиям, или! как еще создать механизм ведения счета действиям этой штуки?

★★★

Вроде, нет числа срабатываний, а если бы и было, то при reboot'е бы сбрасывалось в ноль. Наверное, нужно в том, что занимается переименованием jpg-файла делать сохранение счётчика в отдельном файле с блокировкой этого файла.

mky ★★★★★
()
Ответ на: комментарий от mky

Наверное, проще написать скрипт для mv, на bash. Что бы при перемещении, если файл существует, mv добавляла бы префикс и перемещала его с таким именем. Тогда не понадобится счетчик.

ESTAF ★★★
() автор топика

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

system-root ★★★★★
()
Последнее исправление: system-root (всего исправлений: 1)
Ответ на: комментарий от system-root

из базового имени файла можно создать имя директории, куда будут копироваться файлы с таким именем.
Их 9000 не будет, но скидываться изначально файлы могут через совершенно неизвестный интервал. Может быть так, что через доли секунды второй файл скинется, с таким же именем. А может и через минуту.

ESTAF ★★★
() автор топика
Последнее исправление: ESTAF (всего исправлений: 1)
Ответ на: комментарий от ESTAF

ну ок, есть пара замечаний которые я получил обратившись к deprecated libastral.so:
1) файлы не могут «скидываться», они либо создаются, либо меняют своё расположение на ФС.
2) исходя из первого пункта, у нас выходит, что есть некий процесс, который пишет файлы и ему пофигу, есть уже такой файл или нет
3) выходит, что возможны ситуации когда этот процесс откроет файл на запись пока мы размышляем куда этот файл положить
4) значит что сразу после ивента CLOSE файл нужно переименовать и только потом уже думать какой номер ему дать и куда положить
5) самым простым вариантом может быть timestamp with microseconds (+CRC-32)
6) остается вопрос - а зачем тогда вообще их нумеровать человекочитаемыми цифрми, ведь у них хуже с уникальностью

system-root ★★★★★
()
Ответ на: комментарий от system-root

inotifywait и число срабатываний

".....что бы файлы с изначально одинаковыми именами не разбрасывались за счет номеров срабатываний („0001_некоторый файл с пробелами.jpg“, 0002_другой файл.jpg, „0003_некоторый файл с пробелами.jpg“...)."

ну, тут про эти самые номера срабатываний можно забыть, но момент тот же. имена файлов «создаются>пишутся>закрываются» не последовательно. На самом деле, они скидываются оффтопико-костылем, который не умеет сам их переименовывать. Эта программа может то с одного топик id начать скидывать файл, то с другого. Если их таймштампить и нумеровать по такому принципу, то одинаковые имена файлов будут лежать один сотым, второй 3245й и тд. В разнобой. Сортировка не самоцель. Offline explorer есть такая вендулет софтина. Хотел сменить ее на вариант с php, но не осилил :) >
php и фильтр изображений по размеру
Вся идея в том, что бы скачиваемые файлы сортировались по id топика на одном из форумов, откуда они скачиваются.

<?php
foreach (range(110001, 110005) as $topic) {

$doc = new DOMDocument;
$doc->loadHtml(file_get_contents("http://somesite.org/forum/viewtopic.php?t=$topic"));
$vars = $doc->getElementsByTagName("var");
...
file_put_contents("{$topic}_{$n}.{$ext}", file_get_contents($img));
        $n++;
...

Там посчитали, что это не нужно и решили забить. Ну и сыграл фактор малого понимания php. Ну и сыграл фактор чайника. То есть, еслиб я хорошо знал язык, но у меня была проблема (запутался, или еще что), то помогли. А так, понятное дело. Смысл в помощи. Не получится, продолжу выковыривать по миллиметру инфо, как и что.

ESTAF ★★★
() автор топика
Последнее исправление: ESTAF (всего исправлений: 4)
Ответ на: комментарий от ESTAF

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

ох.. давай разберемся.
если разбить задачу на более мелкие, то первая это «костыль»
WebHTTrack возможно поможет тебе от него избавится

system-root ★★★★★
()
Ответ на: комментарий от system-root

ну, там то же не до конца понял, как качать не с корня, а лишь эти самые топики (http://somesite.org/forum/viewtopic.php?t=[1,1000]
То есть, только страницы, которые имеют такой адрес и не уровнем глубже, если речь про домен, откуда они скачиваются. И все файлы на два уровня по глубине, что вне домена, куда ссылаются эти страницы своими ссылками.
+HTTrack не умеет (как не искал) фильтровать графику по размеру. скажем, что бы скачивались лишь jpg, что больше размера 500x600. OE прекрасно ловит по размеру. То есть, не качает, анализирует и что-то скидывает на диск, а что-то нет, а именно не качает. Ляпы есть, но их не много. И мне мелкие файлы до фонаря, но они грузят канал и сильно замедляют скачивание. Сравнивал с HTTrack.
Трюк делается еще в php, если скачивать лишь первые несколько байт, анализировать их и потом принимать решение о закачке.
По весу файла да - HTTrack оценит файл, но это совсем другое. Не подходит.
добрался своими скудными знаниями до «mv --backup=numbered test2/* test3/». По-мелочи, пилю команду, что бы тильд не было, лишних расширений. Вроде, почти готово. Это дело в inotifywait и все.

ESTAF ★★★
() автор топика
Последнее исправление: ESTAF (всего исправлений: 4)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.