Как кодировать в духе Unix? (небольшие инструменты для одной задачи) - PullRequest
2 голосов
/ 10 марта 2009

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

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

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

Спасибо.

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

Ответы [ 8 ]

3 голосов
/ 10 марта 2009

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

2 голосов
/ 11 марта 2009

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

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

2 голосов
/ 10 марта 2009

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

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

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

2 голосов
/ 10 марта 2009

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

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

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

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

1 голос
/ 10 марта 2009

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

1 голос
/ 10 марта 2009
0 голосов
/ 10 марта 2009

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

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

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

0 голосов
/ 10 марта 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...