Решено: скрипт атораспечатки pdf файлов из нужной папки
Модератор: SLEDopit
Решено: скрипт атораспечатки pdf файлов из нужной папки
добрый день, есть ли у кого скрипт атораспечатки pdf файлов из нужной папки? сам к сожалению не напишу не когда
Re: Решено: скрипт атораспечатки pdf файлов из нужной папки
В смысле lp *.pdf ?
А как файлы из папки автоматом на компьютер попадают?
А как файлы из папки автоматом на компьютер попадают?
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка
Re: Решено: скрипт атораспечатки pdf файлов из нужной папки
раскажу что хочу получить, есть Win2003 server + к нему цепляются клиенты по терминалу на linux'e , remmina прекрасно пробрасывает любую папку, с сервера люди будут отпровлять на pdf принтер, файл будет сохроняться на linux клиента и затем распечатываться. Пока всё в теории, нехватает скрипта
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Решено: скрипт атораспечатки pdf файлов из нужной папки
это не сложно. Вот здесь с примерами: https://github.com/rvoicilas/inotify-tools/wiki#wiki-info
в принципе три пути(по нарастанию костылизма):
1. прикрутить печать к тому, что файлы создаёт. Курите доку к remmina
2. использовать inotyfy, см. выше.
3. использовать crond, и раз в минуту проверять все каталоги.
Re: Решено: скрипт атораспечатки pdf файлов из нужной папки
remmina такое не умеет, и в выше указаном скрипте я не силён
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Решено: скрипт атораспечатки pdf файлов из нужной папки
Bedazzled
тогда ищите, кто сделает за деньги.
тогда ищите, кто сделает за деньги.
Re: Решено: скрипт атораспечатки pdf файлов из нужной папки
Команда
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
Re: Решено: скрипт атораспечатки pdf файлов из нужной папки
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
.. этот скрипт ужасен. Если он вам потрет то, что не надо, а то, что надо стереть, оставит - не удивляйтесь, все так и должно было быть.
- Выбор -iname '*.doc*' вместо двух конкретных паттернов '*.doc' и '*.docx' мне непонятен.
- Почему-то нету '-type f'.
- Зато есть бесполезное ограничение '-maxdepth 1'.
но это все ерунда по сравнению с тем, что написано после '-exec'. А там - . Собственно, причина-то простая - использование {} в командах 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*' оставил как было, тк, в общем-то, это не ошибка)
Спасибо сказали:
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Решено: скрипт атораспечатки pdf файлов из нужной папки
это да.
таки ошибка, ибо может привести к ОЧЕНЬ неожиданному результату.
это плохо, ну да и ладно, там дальше всё равно рухнет.
очень полезное, ибо обычно не предполагается, что скрипт будет рекурсивно ВСЁ обходить.
хороший пример: забить гвоздь отвёрткой.
Re: Решено: скрипт атораспечатки pdf файлов из нужной папки
И что значит "обычно"? У вас? Может быть. А у меня предполагается. Нужен ли Bedazzled-у рекурсивный обход, он не сказал, а что нужно было тому, для кого этот скрипт писался изначально (видимо, на убунтофоруме), так вообще неизвестно, тк нету ссылки на источник. Поэтому, раз я пишу свое мнение о скрипте, я исхожу из своего "обычно", а не вашего.
Да, я считаю, пример хороший: он простой (одна команда после -c) и наглядно демонстрирует ошибку. А ваши метафоры я не понимаю и не хочу понимать: если можете привести пример лучше и объяснить, чем он лучше, приведите.
Upd.
Неожиданному - возможно, но это совсем другая ошибка. Я исправил ошибку, из-за которой программа не работает на некоторых вариантах входных файлов (я бы сказал, что это примерно как 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" {} \;
Спасибо сказали: