Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 09.05.2018
Сообщений: 54

Inotify tools чем заменить delete

01.06.2019, 19:03. Показов 2825. Ответов 12

Студворк — интернет-сервис помощи студентам
Имеется скрипт, который, по замыслу, отслеживает удаление папок, но e delete не работает, потому как файл не удаляется, а перемещается в корзину. Как это реализовать moved_from не правильно, так как он отслеживает даже переименование. Да и надо отслеживать именно удаление, а не перемещение. Пробовал реализовать moved_to с путем в корзину и одновременно moved_from папка мониторинга, но реализовать не получилось.
Чем заменить e- delete в Inotify-tools?
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/bin/bash
pathh=/home/ubunt/bbb/sobytia.txt 
 
export RUN='Y' 
function pgmEvents(){ 
inotifywait -m /home/ubunt/bbb -e delete |
while read path action file; do
for ac in $action
do
isdir=`echo $ac | grep 'ISDIR'`
if [ $? == 0 ]
then
echo "$(date) - The folder '$file' deleted from directory '$path' " >> $pathh 
echo -e "\e[1;34m$(date) - The folder '$file' from directory '$path'\e[0m" #Вывод с цветом
 
fi
done
 
done
}
pgmEvents &
while true ;do
read -n 1
if [[ $REPLY == 'S' ]]; then
kill -9 $PPID 
fi
done
 
RUN='Y'
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.06.2019, 19:03
Ответы с готовыми решениями:

В чем преимущества new и delete и могут ли они действительно заменить функции calloc, malloc, free, realloc?
Язык программирования C поддерживает функции динамического управления пямятью: calloc, malloc, free, realloc - которые неподдерживают...

В чем разница между delete и delete[]?
а можете еще по подробней рассказать про delete, точнее даже delete, чем именно отличается delete от delete, т.к. я попробовал...

Чем отличается delete[] от delete?
чем отличается? delete mas от delete mas

12
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
01.06.2019, 19:54
Цитата Сообщение от VictimofCSharp Посмотреть сообщение
Пробовал реализовать
и одновременно moved_from папка мониторинга, но реализовать не получилось.
Неправильно пробовали?
Цитата Сообщение от VictimofCSharp Посмотреть сообщение
moved_to с путем в корзину
совсем не обязательно, просто обычным test проверить наличие/появление файла в Корзине после получения moved_from
1
0 / 0 / 0
Регистрация: 09.05.2018
Сообщений: 54
01.06.2019, 22:15  [ТС]
Да но moved_from срабатывает и на переименование, а это неправильно

Добавлено через 1 час 12 минут
Marinero, Можно ли обойтись без inotify, слишком плохо он работает, в смысле не смотрит удаление, вместо перемещения еще и переименование отслеживает?
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
01.06.2019, 22:51
Цитата Сообщение от VictimofCSharp Посмотреть сообщение
moved_from срабатывает и на переименование
после чего
Цитата Сообщение от Marinero Посмотреть сообщение
обычным test проверить наличие/появление файла в Корзине
1
0 / 0 / 0
Регистрация: 09.05.2018
Сообщений: 54
01.06.2019, 23:37  [ТС]
Marinero, не подскажете, где ошибка
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/bin/bash
pathh=/home/ubunt/bbb/sobytia.txt 
 
export RUN='Y' 
function pgmEvents(){ 
inotifywait -m /home/ubunt/bbb -e moved_from |
while read path action file; do
for ac in $action
do
isdir=`echo $ac | grep 'ISDIR'`
if [ $? == 0 ]
then
if [ -e $home/ubunt/.local/share/Trash/files/file ]
then
echo "$(date) - The folder '$file' deleted from directory '$path' " >> $pathh 
echo -e "\e[1;34m$(date) - The folder '$file' from directory '$path'\e[0m" #СОобщение с цветом
 
fi
fi
done
 
done
}
pgmEvents &
while true ;do
read -n 1
if [[ $REPLY == 'S' ]]; then
kill -9 $PPID 
fi
done
 
RUN='Y'
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
02.06.2019, 11:51
VictimofCSharp, интересный Вы человек... Предлагаете разбираться с криво написанным кодом не узнав даже его предназначения? Предоставьте информацию что именно Вы хотите получить (для чего составлена программа) и системные сообщения с ошибками/результаты работы Вашей команды - тогда и спрашивайте.
1
0 / 0 / 0
Регистрация: 09.05.2018
Сообщений: 54
02.06.2019, 13:49  [ТС]
Marinero, Код предназначен для отслеживания событий удаления папок из определенной директории. Он должен отслеживать только удаление, перемещение - нет, переименования - нет. Результат работы Inotfy moved_from срабатывает, проверено, но проверка на появление в корзине не срабатывает. Я вижу проблему в том, что мы задаем имя папки, которую удаляем переменной, поэтому сложно проверить наличие в корзине
0
Эксперт NIX
 Аватар для nezabudka
3334 / 752 / 252
Регистрация: 28.06.2015
Сообщений: 1,552
Записей в блоге: 16
02.06.2019, 14:25
Не хочу разбираться что именно делает ваш скрипт, но вот по теме вопроса,
перемещение в корзину надо отлавливать с inotify как то так
Bash
1
2
3
4
5
6
7
8
9
#!/bin/bash
mkfifo my_pipe &>/dev/null
inotifywait --format '%f' -qme moved_to $HOME/.local/share/Trash/files -o my_pipe &
inotifywait --format '%f' -qme moved_from $HOME/test -o my_pipe &
 
while read d; do
        read -t 0.1 b
        [ "$d" = "$b" ] && echo "Файл $d перемещен в корзину"
done <my_pipe
Работает даже с множественными удалениями из файлового менеджера

На всякий случай напоминаю, при отладке по выходу например Ctrl+C
необходимо убить висящие в фоне процессы
Bash
1
pkill inotifywait
1
0 / 0 / 0
Регистрация: 09.05.2018
Сообщений: 54
02.06.2019, 18:19  [ТС]
nezabudka, Не подскажете, почему фильтр на папку не работает, мне надо только папки отслеживать
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/bin/bash
pathh=/home/ubunt/bbb/sobytia.txt 
 
export RUN='Y' 
function pgmEvents(){ 
mkfifo my_pipe &>/dev/null
inotifywait --format '%f' -qme moved_to /home/ubunt/.local/share/Trash/files -o my_pipe &
inotifywait --format '%f' -qme moved_from $HOME/bbb -o my_pipe &
 
while read d; do
read -t 0.1 b
if [ -d $b ]; then
[ "$d" = "$b" ] && [[ -d "$b" ]] && echo "$(date) - The folder '$d' deleted from directory '$path' " >> $pathh && echo -e "\e[1;34m$(date) - The folder '$d' from directory '$path'\e[0m"
fi
done <my_pipe
 
}
pgmEvents &
while true ;do
read -n 1
if [[ $REPLY == 'S' ]]; then
pkill inotifywait
exit
 
fi
done
 
RUN='Y'
0
Эксперт NIX
 Аватар для nezabudka
3334 / 752 / 252
Регистрация: 28.06.2015
Сообщений: 1,552
Записей в блоге: 16
02.06.2019, 20:24
Лучший ответ Сообщение было отмечено VictimofCSharp как решение

Решение

Потому что вы проверяете на существование директорию в отрыве от пути к ней.
Это бы сработало если бы текущей директорией была бы корзина.)))
Также необходимо проверять только в корзине, поскольку
по факту она будет находится на момент проверки именно там.
Bash
1
[ "$d" = "$b" -a -d "$HOME/.local/share/Trash/files/$d" ] && echo "Директория $d перемещена в корзину"
Добавлено через 18 минут
Однако я проверила при наличае одноименной папки в корзине
этот код не сработает. А в облегченной версии
Bash
1
2
3
4
5
6
#!/bin/bash
 
inotifywait --format '%f' -qme moved_from $HOME/bash/cyber/VictimovCSharp/test |
while read d; do
        [ -d "$HOME/.local/share/Trash/files/$d" ] && echo hi
done
наоборот будет работать при наличие одноименной папки в корзине даже
если вы перемещаете ее в другое место. Возможно второй вариант вполне
приемлем только необходимо думаю добавить проверку на время

Добавлено через 21 минуту
Я нашла правильный вариант. При перемещении папки в корзину
и при нахождении одноименной папки в корзине, корзина записывает
ее с дополнительным расширением. Например
Перемещаем в корзину два раза папку с именем ONE
В корзине будет ONE и ONE.1
inotify во второй раз из корзины даст результат соответственно
ONE.1 что не будет сопоставимо с удаляемой директорией
Отсюда если разобраться такая проверка вообще будет не нужна,
из анализа алгоритма получается если первый сигнал получен и
считан второй то направление перемещения по факту уже считается
правильным единственное услови необходимо вставлять вторую переменную
из за возможного изменения расширения. Значит упращенный код в топку а следующий патч в продакшен!
Bash
1
[ -d "$HOME/.local/share/Trash/files/$b" ] && echo "Директория $d под именем $b перемещена в корзину"
Добавлено через 5 минут
Можно конечно добавить впереди проверку
Bash
1
[[ "$b" =~ "$d" ]] &&
Но я считаю это излишним

Добавлено через 3 минуты
Вполне возможно первый inotify вставить в цикл while

Добавлено через 6 минут
Да этот код работает отлично и с групповым удалением
в перемешку с файлами и с одноименными директориями
Bash
1
2
3
4
5
6
7
8
9
#!/bin/bash
mkfifo my_pipe &>/dev/null
inotifywait --format '%f' -qme moved_to $HOME/.local/share/Trash/files -o my_pipe &
inotifywait --format '%f' -qme moved_from $HOME/test -o my_pipe &
 
while read d; do
        read -t 0.1 b
        [[ "$b" =~ "$d" ]] && [ -d "$HOME/.local/share/Trash/files/$b" ] && echo hi
done <my_pipe
1
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
02.06.2019, 22:16
nezabudka, зачем Вы мониторите Корзину? Какая куча ложных срабатываний будет? При удалении/перемещении из $HOME/test достаточно проверить что файл/папка с таким именем появилась/есть в Корзине. Если хотите можно еще проверять время/дату файла.
0
0 / 0 / 0
Регистрация: 09.05.2018
Сообщений: 54
02.06.2019, 22:20  [ТС]
Marinero, надо поставить фильтр, что только на папки, а так как уделенная папка может быть уже только в корзине, то мониторим именно ее
0
Эксперт NIX
 Аватар для nezabudka
3334 / 752 / 252
Регистрация: 28.06.2015
Сообщений: 1,552
Записей в блоге: 16
02.06.2019, 23:16
Marinero, В последнем примере кода, если перемещения файлов делается не программно
ложные срабатывания вообще исключены. Потому что не возможно из файлового менеджера
несколько файлов переместить в разные директории меньше чем за 0.1 секунды. И так как команда
move последовательно работает с каждым файлом то и необходимые пары для нужного
срабатывания будут появляться только последовательно. Все другие варианты будут ущербны. Думаю
довольно не сложно при большой надежности. Ну и специфику переименования файлов самого менеджера
при коллизиях я описала, с чем приходится считаться. Но я совсем не против увидеть что-то более рациональное
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.06.2019, 23:16
Помогаю со студенческими работами здесь

сма DAEWOO DWD M1029A чем заменить транс, трансформатор в обрыве, чем заменить
день добрый. модуль PN:361430A950 первичная транса в обрыве . может кто подскажет параметры , или советом о замене . есть лыжевский на...

Работа с inotify
Хотел задать вопрос кто-то работал с данным видом API и его удобно вообще включать в достаточно обширный проект под Linux, и вообще...

Наблюдение за папкой, используя inotify
Здравствуйте! Существует общая папка большой сети, к которой каждый пользователь компьютера сети имеет доступ как и чтения так и записи. Я...

Необходимо заменить Delete в программе (free pascal) без exit и break
найти количество цифр в строке рекурсией и иттерацией var a:string; function kr(s:string):byte; begin if (length(s)&gt;0) and...

В чем преимущества операций new и delete по сравнению с функциями для работы с динамической памятью
Здравствуйте, совсем не знаю язык Си, подскажите отличая между С++. В чем преимущества операций new и delete по сравнению с функциями C...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru