Решено: скрипт атораспечатки pdf файлов из нужной папки

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС для молодых и начинающих системных администраторов.

Модератор: SLEDopit

Bedazzled
Сообщения: 311
ОС: ubuntu

Решено: скрипт атораспечатки pdf файлов из нужной папки

Сообщение Bedazzled »

добрый день, есть ли у кого скрипт атораспечатки pdf файлов из нужной папки? сам к сожалению не напишу не когда:(
Спасибо сказали:

Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: Решено: скрипт атораспечатки pdf файлов из нужной папки

Сообщение eddy »

В смысле lp *.pdf ?

А как файлы из папки автоматом на компьютер попадают?
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:

Bedazzled
Сообщения: 311
ОС: ubuntu

Re: Решено: скрипт атораспечатки pdf файлов из нужной папки

Сообщение Bedazzled »

eddy писал(а):
30.04.2013 18:01
В смысле lp *.pdf ?

А как файлы из папки автоматом на компьютер попадают?


раскажу что хочу получить, есть Win2003 server + к нему цепляются клиенты по терминалу на linux'e , remmina прекрасно пробрасывает любую папку, с сервера люди будут отпровлять на pdf принтер, файл будет сохроняться на linux клиента и затем распечатываться. Пока всё в теории, нехватает скрипта:)
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Решено: скрипт атораспечатки pdf файлов из нужной папки

Сообщение drBatty »

Bedazzled писал(а):
30.04.2013 16:41
сам к сожалению не напишу не когда

это не сложно. Вот здесь с примерами: https://github.com/rvoicilas/inotify-tools/wiki#wiki-info

Bedazzled писал(а):
30.04.2013 19:22
файл будет сохроняться на linux клиента и затем распечатываться.

в принципе три пути(по нарастанию костылизма):

1. прикрутить печать к тому, что файлы создаёт. Курите доку к remmina
2. использовать inotyfy, см. выше.
3. использовать crond, и раз в минуту проверять все каталоги.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Bedazzled
Сообщения: 311
ОС: ubuntu

Re: Решено: скрипт атораспечатки pdf файлов из нужной папки

Сообщение Bedazzled »

remmina такое не умеет, и в выше указаном скрипте я не силён :(
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Решено: скрипт атораспечатки pdf файлов из нужной папки

Сообщение drBatty »

Bedazzled
тогда ищите, кто сделает за деньги.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Bedazzled
Сообщения: 311
ОС: ubuntu

Re: Решено: скрипт атораспечатки pdf файлов из нужной папки

Сообщение Bedazzled »

Команда

loffice -p ~/Documents/yourfile.rtf

должна вывести файл ~/Documents/yourfile.rtf на печать на принтер по умолчанию. Принтер должен быть заранее настроен и выбран.

Если это сработает, остается только заусунуть команду в кронтаб.

loffice --pt {Printername} {filename1}

позволяет указать имя принтера явным образом.
А вот еще лучше чем крон:

The incrond (inotify cron daemon) is a daemon which monitors filesystem events (such as add a new file, delete a file and so on) and executes commands or shell scripts. It’s use is generally similar to cron.

http://www.cyberciti.biz/faq/linux-inotify...te-directories/


нужно, чтобы печатались все doc- и docx-файлы из загрузок, а потом удалялись.

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

#!/bin/bash

DIR="$HOME/Загрузки"
ERR_LOG="err.log"

cd "$DIR" || exit 1
find -maxdepth 1 -iname "*.doc*" -exec bash -c "if loffice -p {} ; then rm {} ; else echo \"Unable to print {}\" >>\"$ERR_LOG\" ; fi" \;

exit 0


нашёл на ubuntu форуме.
как я понимаю можно заменить loffice на lp и тогда должны печататься pdf
Спасибо сказали:

Аватара пользователя
sgfault
Сообщения: 586
Статус: -

Re: Решено: скрипт атораспечатки pdf файлов из нужной папки

Сообщение sgfault »

Bedazzled писал(а):
05.05.2013 19:46
нужно, чтобы печатались все doc- и docx-файлы из загрузок, а потом удалялись.

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

#!/bin/bash

DIR="$HOME/Загрузки"
ERR_LOG="err.log"

cd "$DIR" || exit 1
find -maxdepth 1 -iname "*.doc*" -exec bash -c "if loffice -p {} ; then rm {} ; else echo \"Unable to print {}\" >>\"$ERR_LOG\" ; fi" \;

exit 0


нашёл на ubuntu форуме.
как я понимаю можно заменить loffice на lp и тогда должны печататься pdf

:huh: .. этот скрипт ужасен. Если он вам потрет то, что не надо, а то, что надо стереть, оставит - не удивляйтесь, все так и должно было быть.
- Выбор -iname '*.doc*' вместо двух конкретных паттернов '*.doc' и '*.docx' мне непонятен.
- Почему-то нету '-type f'.
- Зато есть бесполезное ограничение '-maxdepth 1'.
но это все ерунда по сравнению с тем, что написано после '-exec'. А там - :ohmy: . Собственно, причина-то простая - использование {} в командах shell (после опции '-c'). Вот пример:

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

$ touch 'a b.txt'
$ find -type f -exec sh -c 'ls {}' \;
ls: cannot access ./a: No such file or directory
ls: cannot access b.txt: No such file or directory

Видите? Оно не работает, если в имени файла есть пробел. Оно также не будет работать, если там есть табуляция или новая строка. А уж если там окажутся спецсимволы типа '*', '[' и ']' и тд, то при небольшом везении можно получить весьма впечатляющие (по разрушительным последствиям) результаты.

Исправить это, как всегда, просто:

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

find -maxdepth 1 -type f -iname "*.doc*" -exec sh -euf -c 'l="$1"; f="$2"; if loffice -p "$f" ; then rm "$f" ; else echo "Unable to print \"$f\"" >>"$l" ; fi' sh "$ERR_LOG" {} \;

(maxdepth и '*.doc*' оставил как было, тк, в общем-то, это не ошибка)
Спасибо сказали:

Bedazzled
Сообщения: 311
ОС: ubuntu

Re: Решено: скрипт атораспечатки pdf файлов из нужной папки

Сообщение Bedazzled »

спасибо, работает.
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Решено: скрипт атораспечатки pdf файлов из нужной папки

Сообщение drBatty »

sgfault писал(а):
06.05.2013 14:26
.. этот скрипт ужасен.

это да.
sgfault писал(а):
06.05.2013 14:26
- Выбор -iname '*.doc*' вместо двух конкретных паттернов '*.doc' и '*.docx' мне непонятен.

sgfault писал(а):
06.05.2013 14:26
'*.doc*' оставил как было, тк, в общем-то, это не ошибка

таки ошибка, ибо может привести к ОЧЕНЬ неожиданному результату.
sgfault писал(а):
06.05.2013 14:26
- Почему-то нету '-type f'.

это плохо, ну да и ладно, там дальше всё равно рухнет.
sgfault писал(а):
06.05.2013 14:26
- Зато есть бесполезное ограничение '-maxdepth 1'.

очень полезное, ибо обычно не предполагается, что скрипт будет рекурсивно ВСЁ обходить.
sgfault писал(а):
06.05.2013 14:26
но это все ерунда по сравнению с тем, что написано после '-exec'. А там - ohmy.gif . Собственно, причина-то простая - использование {} в командах shell (после опции '-c'). Вот пример:

хороший пример: забить гвоздь отвёрткой.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
sgfault
Сообщения: 586
Статус: -

Re: Решено: скрипт атораспечатки pdf файлов из нужной папки

Сообщение sgfault »

drBatty писал(а):
08.05.2013 09:44
sgfault писал(а):
06.05.2013 14:26
- Зато есть бесполезное ограничение '-maxdepth 1'.

очень полезное, ибо обычно не предполагается, что скрипт будет рекурсивно ВСЁ обходить.

И что значит "обычно"? У вас? Может быть. А у меня предполагается. Нужен ли Bedazzled-у рекурсивный обход, он не сказал, а что нужно было тому, для кого этот скрипт писался изначально (видимо, на убунтофоруме), так вообще неизвестно, тк нету ссылки на источник. Поэтому, раз я пишу свое мнение о скрипте, я исхожу из своего "обычно", а не вашего.

drBatty писал(а):
08.05.2013 09:44
sgfault писал(а):
06.05.2013 14:26
но это все ерунда по сравнению с тем, что написано после '-exec'. А там - ohmy.gif . Собственно, причина-то простая - использование {} в командах shell (после опции '-c'). Вот пример:

хороший пример: забить гвоздь отвёрткой.

Да, я считаю, пример хороший: он простой (одна команда после -c) и наглядно демонстрирует ошибку. А ваши метафоры я не понимаю и не хочу понимать: если можете привести пример лучше и объяснить, чем он лучше, приведите.

Upd.
drBatty писал(а):
08.05.2013 09:44
sgfault писал(а):
06.05.2013 14:26
'*.doc*' оставил как было, тк, в общем-то, это не ошибка

таки ошибка, ибо может привести к ОЧЕНЬ неожиданному результату.

Неожиданному - возможно, но это совсем другая ошибка. Я исправил ошибку, из-за которой программа не работает на некоторых вариантах входных файлов (я бы сказал, что это примерно как Segmentation Fault). Неудачно выбранный паттерн - это ошибка алгоритма: программа будет работать, как должна, но не так, как, возможно, думает пользователь. В любом случае, вы меня убедили, что ее тоже надо было исправить.

Вот исправленный вариант:

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

find -maxdepth 1 -type f \( -iname '*.doc' -o -iname '*.docx' \) -exec sh -euf -c 'l="$1"; f="$2"; if loffice -p "$f" ; then rm "$f" ; else echo "Unable to print \"$f\"" >>"$l" ; fi' sh "$ERR_LOG" {} \;

Спасибо сказали: