Проверка файлов > почта, создание файла

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

sedikpoll
Сообщения: 100

Проверка файлов > почта, создание файла

Сообщение sedikpoll »

1. Есть файл old.txt такого содержания:
1.jpg
2.jpg
3.jpg

2. Выполняем ls > now.txt
Содержание old.txt и now.txt сравнивается, если между ними присутствует разница то выслать письмо с описанием изменений на почту либо просто создать рядом файл.

Никогда подобное не делал, даже не знаю с чего плясать. Зарание спасибо.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5405
ОС: Gentoo

Re: Проверка файлов > почта, создание файла

Сообщение /dev/random »

1) Список изменений делается командой diff:
diff old.txt new.txt > changes.diff
(поддерживается куча выходных форматов, если не устраивает дефолтный, см. man diff)

2) Статус, возвращаемый командой diff, зависит от того, были ли обнаружены изменения, это позволяет использовать её в условии if'а.

3) Отправить этот файл на почту можно командой mail, msmtp или чем вы там пользуетесь.
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4462
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Проверка файлов > почта, создание файла

Сообщение Rootlexx »

sedikpoll писал(а):
06.09.2010 00:17
Содержание old.txt и now.txt сравнивается

Используйте для этого diff.
sedikpoll писал(а):
06.09.2010 00:17
выслать письмо с описанием изменений на почту

А для этого - mail.

Добавлено (0:31): чуть опоздал.
Создавать файл new.txt, кстати, необязательно:

Код: Выделить всё

diff old.txt <(ls) > changes.diff
- даст тот же результат.
Спасибо сказали:
sedikpoll
Сообщения: 100

Re: Проверка файлов > почта, создание файла

Сообщение sedikpoll »

Большое спасибо за ответы.
Дело в твом что я не знаю как это все можно связать в один скрипт, но понимаю отдельный пункты.

Не могли бы вы показать пример к данному пункту, например создать файл если есть изменения?
"2) Статус, возвращаемый командой diff, зависит от того, были ли обнаружены изменения, это позволяет использовать её в условии if'а."
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: Проверка файлов > почта, создание файла

Сообщение ZyX »

diff вернёт единицу, если между данными файлами имеются различия, так что код будет примерно такой:

~/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.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5405
ОС: Gentoo

Re: Проверка файлов > почта, создание файла

Сообщение /dev/random »

Код: Выделить всё

if diff a.txt b.txt > diff.txt
then
  echo "Изменений нет; файл всё равно создан (пустой), удаляем его"
  rm diff.txt
else
  echo "Изменения есть, файл создан"
fi
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: Проверка файлов > почта, создание файла

Сообщение ZyX »

Относительно конструкции diff old.txt <(ls): не используйте её, если хотите сохранить совместимость с POSIX shell. Используйте ls | diff old.txt -. Кроме того, Rootlexx забыл указать дефис в качестве одного из аргументов. Без него diff не будет работать. Не знал, что zsh подставляет на место <(...) название файла, надо больше читать документацию.
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4462
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Проверка файлов > почта, создание файла

Сообщение Rootlexx »

ZyX писал(а):
06.09.2010 00:44
Не знал, что zsh подставляет на место <(...) название файла, надо больше читать документацию.

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.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Проверка файлов > почта, создание файла

Сообщение sash-kan »

ZyX писал(а):
06.09.2010 00:37
может дальше посоветуют что-нибудь ещё
что ж тут сложного-то?
echo 'текст письма' | mail -s 'subject письма' адрес@получате.ля
или, в данном конкретном случае:
$ diff -ruaN old.txt <(ls) > changes || cat changes | mail -s 'вот такие изменения произошли' мой@адр.ес; rm changes; ls > old.txt

p.s. чтобы программа mail работала, должен быть установлен и настроен какой-нибудь smtpd. хоть самый примитивный.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
sedikpoll
Сообщения: 100

Re: Проверка файлов > почта, создание файла

Сообщение sedikpoll »

Всем большое спасибо, стало понятней. Письма идут.
Как мне теперь отправлять само содержание на почту. Спасибо.
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4462
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Проверка файлов > почта, создание файла

Сообщение Rootlexx »

sedikpoll писал(а):
06.09.2010 19:34
Как мне теперь отправлять само содержание diff.txt на почту. Спасибо.

sash-kan уже привёл вам пример.

Код: Выделить всё

cat имя_файла | mail ...
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: Проверка файлов > почта, создание файла

Сообщение pelmen »

uuenview /path/to/file | mail -s "subject" user@domain
Спасибо сказали: