Проверка файлов > почта, создание файла
Модераторы: /dev/random, Модераторы разделов
-
- Сообщения: 100
Проверка файлов > почта, создание файла
1. Есть файл old.txt такого содержания:
1.jpg
2.jpg
3.jpg
2. Выполняем ls > now.txt
Содержание old.txt и now.txt сравнивается, если между ними присутствует разница то выслать письмо с описанием изменений на почту либо просто создать рядом файл.
Никогда подобное не делал, даже не знаю с чего плясать. Зарание спасибо.
1.jpg
2.jpg
3.jpg
2. Выполняем ls > now.txt
Содержание old.txt и now.txt сравнивается, если между ними присутствует разница то выслать письмо с описанием изменений на почту либо просто создать рядом файл.
Никогда подобное не делал, даже не знаю с чего плясать. Зарание спасибо.
-
- Администратор
- Сообщения: 5405
- ОС: Gentoo
Re: Проверка файлов > почта, создание файла
1) Список изменений делается командой diff:
diff old.txt new.txt > changes.diff
(поддерживается куча выходных форматов, если не устраивает дефолтный, см. man diff)
2) Статус, возвращаемый командой diff, зависит от того, были ли обнаружены изменения, это позволяет использовать её в условии if'а.
3) Отправить этот файл на почту можно командой mail, msmtp или чем вы там пользуетесь.
diff old.txt new.txt > changes.diff
(поддерживается куча выходных форматов, если не устраивает дефолтный, см. man diff)
2) Статус, возвращаемый командой diff, зависит от того, были ли обнаружены изменения, это позволяет использовать её в условии if'а.
3) Отправить этот файл на почту можно командой mail, msmtp или чем вы там пользуетесь.
Спасибо сказали:
-
- Бывший модератор
- Сообщения: 4462
- Статус: GNU generation
- ОС: Debian GNU/Linux
Re: Проверка файлов > почта, создание файла
Используйте для этого diff.
А для этого - mail.
Добавлено (0:31): чуть опоздал.
Создавать файл new.txt, кстати, необязательно:
Код: Выделить всё
diff old.txt <(ls) > changes.diff
Спасибо сказали:
-
- Сообщения: 100
Re: Проверка файлов > почта, создание файла
Большое спасибо за ответы.
Дело в твом что я не знаю как это все можно связать в один скрипт, но понимаю отдельный пункты.
Не могли бы вы показать пример к данному пункту, например создать файл если есть изменения?
"2) Статус, возвращаемый командой diff, зависит от того, были ли обнаружены изменения, это позволяет использовать её в условии if'а."
Дело в твом что я не знаю как это все можно связать в один скрипт, но понимаю отдельный пункты.
Не могли бы вы показать пример к данному пункту, например создать файл если есть изменения?
"2) Статус, возвращаемый командой diff, зависит от того, были ли обнаружены изменения, это позволяет использовать её в условии if'а."
-
- Сообщения: 355
- ОС: Gentoo
Re: Проверка файлов > почта, создание файла
diff вернёт единицу, если между данными файлами имеются различия, так что код будет примерно такой:
С посылкой сообщений по почте из консоли я дела никогда не имел, но знаю, что это возможно. Читайте man mail, может дальше посоветуют что-нибудь ещё. Если вы используете kmail на той машине, с которой шлёте сообщение, то у меня есть подозрение, что его можно заставить послать сообщение через qdbus.
~/tmp/code.sh (Created by format.vim)
ls > new.txt
if diff -q old.txt new.txt 2>/dev/null ; then
# Код на случай, если ничего не изменилось
else
# Код на случай, если что-то изменилось
fi
# Если в первом случае ничего не надо делать:
if ! diff -q old.txt new.txt 2>/dev/null ; then
# Код на случай, если что-то изменилось
fi
С посылкой сообщений по почте из консоли я дела никогда не имел, но знаю, что это возможно. Читайте man mail, может дальше посоветуют что-нибудь ещё. Если вы используете kmail на той машине, с которой шлёте сообщение, то у меня есть подозрение, что его можно заставить послать сообщение через qdbus.
Спасибо сказали:
-
- Администратор
- Сообщения: 5405
- ОС: Gentoo
Re: Проверка файлов > почта, создание файла
Код: Выделить всё
if diff a.txt b.txt > diff.txt
then
echo "Изменений нет; файл всё равно создан (пустой), удаляем его"
rm diff.txt
else
echo "Изменения есть, файл создан"
fi
-
- Сообщения: 355
- ОС: Gentoo
Re: Проверка файлов > почта, создание файла
Относительно конструкции diff old.txt <(ls): не используйте её, если хотите сохранить совместимость с POSIX shell. Используйте ls | diff old.txt -. Кроме того, Rootlexx забыл указать дефис в качестве одного из аргументов. Без него diff не будет работать. Не знал, что zsh подставляет на место <(...) название файла, надо больше читать документацию.
-
- Бывший модератор
- Сообщения: 4462
- Статус: GNU generation
- ОС: Debian GNU/Linux
Re: Проверка файлов > почта, создание файла
bash поступает так же. Это не эквивалент "ls | diff old.txt -", это подстановка процесса.
(man bash) писал(а):Process Substitution
Process substitution is supported on systems that support named pipes (FIFOs) or the /dev/fd method of naming open files. It takes the form of <(list) or >(list). The process list is run with its input or output connected to a FIFO or some file in /dev/fd. The name of this file is passed as an argument to the current command as the result of the expansion. If the >(list) form is used, writing to the file will provide input for list. If the <(list) form is used, the file passed as an argument should be read to obtain the output of list.
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Проверка файлов > почта, создание файла
что ж тут сложного-то?
echo 'текст письма' | mail -s 'subject письма' адрес@получате.ля
или, в данном конкретном случае:
$ diff -ruaN old.txt <(ls) > changes || cat changes | mail -s 'вот такие изменения произошли' мой@адр.ес; rm changes; ls > old.txt
p.s. чтобы программа mail работала, должен быть установлен и настроен какой-нибудь smtpd. хоть самый примитивный.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
Спасибо сказали:
-
- Сообщения: 100
Re: Проверка файлов > почта, создание файла
Всем большое спасибо, стало понятней. Письма идут.
Как мне теперь отправлять само содержание на почту. Спасибо.
Как мне теперь отправлять само содержание на почту. Спасибо.
-
- Бывший модератор
- Сообщения: 4462
- Статус: GNU generation
- ОС: Debian GNU/Linux
Re: Проверка файлов > почта, создание файла
-
- Сообщения: 1268
- ОС: debian
Re: Проверка файлов > почта, создание файла
uuenview /path/to/file | mail -s "subject" user@domain