Как кодировать в духе Unix? (маленькие инструменты для одной задачи)

Я написал небольшой сценарий, который извлекает фотографии и видеоролики с моей камеры и переименовывает их в зависимости от их даты, а затем копирует их на мой жесткий диск, автоматически управляя конфликтами (то же имя, тот же размер, тот же md5?)
Работает довольно хорошо.

Но это один сценарий.
Время от времени мне нужно проверять, не спрятана ли картинка где-то в томе, поэтому я бы хотел использовать только "диспетчер конфликтов". Думаю, если бы я должным образом следовал духу Unix крошечных инструментов для одной задачи, я мог бы это сделать.

Каковы лучшие ресурсы, лучшие практики и ваш опыт по этому вопросу?

Спасибо.

Изменить: Хотя я хотел бы читать книги Unix и иметь глубокое понимание предмета, я сначала ищу Великие Принципы. Плюс я склонен ограничивать себя онлайн-ресурсами.

8 ответов

Решение

Я обнаружил, что большая часть кода не может быть повторно использована, а развивается. Возьмите существующий код и выделите часть "диспетчера конфликтов" в ее собственную функцию или программу, затем вызовите эту программу, вместо того, чтобы она была частью вашего исходного приложения. После этого вы сможете повторно использовать ту часть кода, которую вам необходимо повторно использовать. Иногда невозможно спроектировать программное обеспечение для повторного использования, потому что вы просто не знаете, какие части вы хотите использовать повторно.

Что касается ресурсов, кажется, что полки магазинов заполнены книгами для пользователей настольных систем Linux и системных администраторов, но найти хорошие книги по программированию для Linux сложно. Несколько хороших:

Наконец, Эрик Рэймонд сделал "Искусство программирования Unix" доступным онлайн бесплатно.

Я бы посмотрел книгу под названием " Искусство программирования Unix".

Проверьте эту книгу:

Искусство программирования Unix Эрик С. Рэймонд

http://www.amazon.com/UNIX-Programming-Addison-Wesley-Professional-Computing/dp/0131429019

Вот его сайт: http://www.catb.org/~esr/writings/taoup/

Лично, когда я вижу, что сценарий, который я планирую написать, будет длиннее дюжины строк, я использую python вместо сценария оболочки. Одна хитрость в написании скриптов на Python - это то, что очень легко программировать в стиле, в котором вы создаете как инструменты командной строки, так и библиотеки "unix spirit". Например, для вашего "диспетчера конфликтов" создайте файл (модуль python) и поместите функциональность в функции и / или классы, а затем в конце вы можете поместить "главную" функцию python (обычную if __name__=='__main__': танцевать), где вы анализируете параметры командной строки (для этого используйте встроенный модуль OptionParser, это очень приятно!) и используете функциональность в функциях / классах.

Таким образом, вы можете использовать утилиту как отдельную программу командной строки, или вы можете импортировать модуль в другой скрипт на Python и использовать функциональность, определенную там, через функции / классы вместо анализа ввода.

Книга Software Tools (amazon) Кернигана и Плаугера является классикой на эту тему. Я думаю, что это должно быть обязательным чтением для любого серьезного студента разработки программного обеспечения.

Я думаю, что некоторые ключи для хорошего кода GNU:

  • Правильная обработка системных сигналов, например, отсоединение файлов жесткого диска, если получен SIGTERM.
  • Правильное использование труб и стандартный ввод / вывод
  • Общие правила флагов командной строки

Я также рекомендовал бы эту книгу. Довольно старый, но я думаю, что вполне понятно, объясняя принципы Unix.

- искусство программирования в UNIX - это довольно хорошая книга, хорошо "unix way", поскольку она существует. OTOH, если "сделай так мало работы, как выполнил свою работу", возможно, ты уже там.:)

Другие вопросы по тегам