{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Здоровий глузд: дописи з тегом конвеєр",
    "_rss_description": "Олександр Колодько. Інформаційний та навігаційний дизайнер. Співзасновник команди ARC, співзасновник та головний дизайнер в Агентах змін (А3). Пишу про дизайн і цікаве мені · alexkolodko.com · wayfinding.systems",
    "_rss_language": "uk",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/blog-archive.alexkolodko.com\/tags\/konveyer\/",
    "feed_url": "https:\/\/blog-archive.alexkolodko.com\/tags\/konveyer\/json\/",
    "icon": "https:\/\/blog-archive.alexkolodko.com\/pictures\/userpic\/userpic@2x.jpg?1768915547",
    "authors": [
        {
            "name": "Олександр Колодько",
            "url": "https:\/\/blog-archive.alexkolodko.com\/",
            "avatar": "https:\/\/blog-archive.alexkolodko.com\/pictures\/userpic\/userpic@2x.jpg?1768915547"
        }
    ],
    "items": [
        {
            "id": "125",
            "url": "https:\/\/blog-archive.alexkolodko.com\/all\/automation-pdfscale\/",
            "title": "Конвеєр: масштабування PDF-файлів за допомогою pdfscale",
            "content_html": "<p>Іноді буває треба робити однакові макети у різних масштабах. Наприклад, якій знаки, що можуть зчитуватись зблизька і здалека. І можна під ці випадки робити окремі макети, але оновлювати весь цей парк знаків не зручно.<\/p>\n<p>Краще мати якийсь один майстер-макет, як компонент у Фігмі, який можна розтягнути або зменшити до потрібного розміру. Для цього можна зробити основу в AI\/ID, а масштабні копії робити в окремому ID, де макет буде вставлений лінком, і будуть налаштовані нові розміри. Потім це все діло можна експортувати у PDF вже у новому розмірі.<\/p>\n<p>Але це знову зайві дії: оновити майстер-файл, відкрити копії, оновити лінки, експортувати, зберегти у потрібну теку. А якщо у вас в одному файлі ще й різні макети які потрібно нарізати, то взагалі жах.<\/p>\n<p>Тому виходом може бути вже масштабування вже готових PDF-файлів, з одного розміру в різні. В принципі так працює експорт для екранів в Adobe Illustrator або ж у Фігмі, але це для екранів, а в тому ж Індизайні таких функцій взагалі немає.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/pdfscale-principle.png\" width=\"1200\" height=\"675\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Принцип масштабування<\/div>\n<\/div>\n<h2>Скрипт pdfscale<\/h2>\n<p>Знайшов гарний bash-скрипт саме для масштабування PDF — <a href=\"https:\/\/github.com\/tavinus\/pdfScale\">pdfscale<\/a> (для роботи він потребує встановлених gs, iamgemagick, xpdf, все написано у документації в розділі <i>Dependencies<\/i>). Сам скрипт можна встановити як команду у терміналі, наприклад, через wget<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">wget -q -O \/tmp\/pdfScale.sh &#039;https:\/\/raw.githubusercontent.com\/tavinus\/pdfScale\/master\/pdfScale.sh&#039; &amp;&amp; bash \/tmp\/pdfScale.sh --install<\/code><\/pre><p>У документації детально розписані всі функції і є приклади. Тож скрипт дозволяє масштабувати та змінювати розміри PDF: має вбудовані друкарські розміри і можливість вказати свої довільні у різних видах величин.<\/p>\n<p>Наприклад, можна макет розтягнути до 1500×1500 мм:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">bash pdfScale.sh -r &quot;custom mm 1500 1500&quot; file.pdf newfile.pdf<\/code><\/pre><p>де:<\/p>\n<ul>\n<li><i>— r «custom mm 1500 1500»<\/i> — ключ resize, довільний розмір, у mm, а далі ширина та висота.<\/li>\n<li><i>file.pdf<\/i> — вихідний файл<\/li>\n<li><i>newfile.pdf<\/i> — змінений файл<\/li>\n<\/ul>\n<p>При цьому не важливо у якому розмірі оригінал, він масштабується пропорційно.<\/p>\n<p>Все це можна упакувати у цикл, який буде змінювати розмір всіх pff-файлів у теці й одразу складати їх у іншу теку 1500:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">#!\/bin\/bash\n\nfor i in *.pdf\ndo\n\tpdfScale -r &quot;custom mm 1434 1500&quot; $i 1500\/$i\n\techo &quot;$i - Done&quot;\ndone<\/code><\/pre><p>Або ж те саме можна викликати одним рядком у Терміналі:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">for i in *.pdf; pdfScale -r &quot;custom mm 1434 1500&quot; $i 1500\/$i; echo &quot;$i - Done&quot;<\/code><\/pre><h2>Додаткове перейменування<\/h2>\n<p>Далі також всі змасштабовані файли можна перейменувати. наприклад, основні макети я мав у розмірі 660×690 мм і відповідно у самих файлах був написаний цей розмір. Для цього у скрипт додав рядок, з функцією rename, що заміняє у нових файлах текст «-660x690» на «-1434x150»:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">rename &#039;s\/-660x690\/-1434x1500\/g&#039; 1500\/$i<\/code><\/pre><p>Весь скрипт:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">#!\/bin\/bash\n\nfor i in *.pdf\ndo\n\tpdfScale -r &quot;custom mm 1434 1500&quot; $i 1500\/$i\n\techo &quot;$i - Done&quot;\n    rename &#039;s\/-660x690\/-1434x1500\/g&#039; 1500\/$i\ndone<\/code><\/pre><p>Або для Термінала:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">for i in *.pdf; pdfScale -r &quot;custom mm 1434 1500&quot; $i 1500\/$i;rename &#039;s\/-660x690\/-1434x1500\/g&#039; 1500\/$i; echo &quot;$i - Done&quot;<\/code><\/pre><div class=\"e2-text-video\">\n<video src=\"https:\/\/blog-archive.alexkolodko.com\/video\/01-bash-x2.mp4#t=0.001\" width=\"2560\" height=\"1510.8431044109\" controls alt=\"\" \/>\n\n<div class=\"e2-text-caption\">Як працює скрипт<\/div>\n<\/div>\n<h2>CMD-файл<\/h2>\n<p>І далі можна перетворити це на виконуваний command-файл, який можна просто запускати з теки.<\/p>\n<p>Сам код:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">#!\/bin\/bash\n\n# Change directory to be where the command is.\ncd &quot;$(cd &quot;$(dirname &quot;$0&quot;)&quot; &gt; \/dev\/null &amp;&amp; pwd)&quot;\n\n# Run commands\nfor i in *.pdf\ndo\n\tpdfScale -r &quot;custom mm 1434 1500&quot; $i 1500\/$i\n\trename &#039;s\/-660x690\/-1434x1500\/g&#039; 1500\/$i\n\techo &quot;$i - Done&quot;\ndone<\/code><\/pre><p>Завантажити <a href=\"https:\/\/www.dropbox.com\/scl\/fi\/fc61wol3kummir3fchu5k\/pdfscale.command?rlkey=q7lvg6z6tuc66rcyqus2qyc8n&dl=0\">pdfscale.command<\/a> — приклад виконавчого файлу запуску скрипту. Розміри та назви тільки вкажіть свої.<\/p>\n<p>А якщо потрібно зробити кілька розмірів, то можна скопіювати рядки pdfScale та rename і<br \/>\nвказати додаткові розміри.<\/p>\n<div class=\"e2-text-video\">\n<video src=\"https:\/\/blog-archive.alexkolodko.com\/video\/02-cmd-x2.mp4#t=0.001\" width=\"2560\" height=\"1510.8431044109\" controls alt=\"\" \/>\n\n<div class=\"e2-text-caption\">Як це виглядає в роботі<\/div>\n<\/div>\n<p><hr><\/p>\n<div><div style=\"float: left;\"><p><span style=\"font-weight:bold; font-size: 3em\"><b>₴<\/b><\/span><\/p>\n<\/div><div style=\"padding: 1em 0 0 4em\"><p>Якщо вам було цікаво та корисно, можете пригостити мене кавою ☕️: картка Монобанку: <tt>4441114450427339<\/tt> або <a href=\"https:\/\/send.monobank.ua\/5jVrTaRziu\">через сайт<\/a>.<\/p>\n<\/div><\/div>",
            "date_published": "2023-12-07T17:47:49+02:00",
            "date_modified": "2023-12-07T17:51:59+02:00",
            "tags": [
                "автоматизація",
                "дизайн-конвеєр",
                "конвеєр"
            ],
            "image": "https:\/\/blog-archive.alexkolodko.com\/pictures\/pdfscale-principle.png",
            "_date_published_rfc2822": "Thu, 07 Dec 2023 17:47:49 +0200",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "125",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/pdfscale-principle.png"
                ]
            }
        },
        {
            "id": "124",
            "url": "https:\/\/blog-archive.alexkolodko.com\/all\/automation-pdf-split\/",
            "title": "Конвеєр: автоматизоване нарізання PDF на різні файли",
            "content_html": "<p>В роботі над дизайном багатьох макетів буває дуже зручно їх всі робити в одному файлі: можна простіше копіювати елементи та стилі, мати єдину базу символів, бачити загальну картинку одразу на всіх макетах тощо.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/ai-file.jpg\" width=\"2400\" height=\"1381\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Багато макетів різних розмірів у Adobe Illustrator<\/div>\n<\/div>\n<p>Але редактори погано пристосовані для збереження потім таких робочих файлів, що йтимуть на виробництво. Процес збереження купи файлів починає нагадувати нудну справу, в якій ви вибираєте що зберігати, якось розділяєте на окремі файли та при збереженні у різні формати правильно називаєте все. Така безглузда трата робочого часу і це нууудно 🥱. І в такій ручній роботі точно виникатимуть помилки, тож доведеться починати наново.<\/p>\n<p>У ІнДизайні є можливість зберігати PDF посторінково. Але можливості обмежені й потім все одно треба перейменовувати файли, як треба. У Ілюстраторі взагалі така опція є тільки для збереження окремих артбордів для екранів (у RGB), тож для друку це не підходить. І вирішувати це можна сторонніми скриптами, як-то скрипт для збереження файлу у різні формати, який ми робили для своєї роботи.<\/p>\n<p>Але це не вирішує задачу, коли у вас частина макетів двосторонні й ці різні сторони мають зберегтись, наприклад, в один PDF на кілька сторінок.<\/p>\n<p>А якщо вже після збереження потрібно буде внести якісь зміни, то весь цей нудний процес треба робити спочатку і добре якщо не для всіх файлів.<\/p>\n<h2>Конвеєр та алгоритм<\/h2>\n<p>Мені цікаво шукати і організовувати дизайн-конвеєр під такі задачі, оскільки вони точно повторюватимуться, тож автоматизація дає шалену економію часу, який можна витратити на цікавіші речі.<\/p>\n<p>Колись писав про <a href=\"https:\/\/blog.alexkolodko.com\/all\/mass-rename\/\">масове перейменування файлів<\/a>, які перед цим нарізав в Акробаті на окремі файли. Але це все одно довго, треба ще швидше.<\/p>\n<p>Спочатку потрібно подумати над наявними можливостями й алгоритмом. Кожен редактор може за раз зберігати всі або діапазон сторінок у суцільний PDF-файл. Тож якщо мати інструкцію, яка скаже які сторінки мають піти в який файл і як ці файли назвати. Така інструкція — своєрідна «маска», яку можна застосувати для файлу.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">1-2=filename01\n3=filename02\n4-5=filename03\n6-8 10=filename04\n…<\/code><\/pre><p>де:<\/p>\n<ul>\n<li>1-2 — сторінки документа (може містити одну цифру, діапазон через дефіс, перелік окремих сторінок через пробіл, також доступні параметри початку і кінця документа <tt>start-10<\/tt> чи <tt>57-end<\/tt> )<\/li>\n<li>= — технічний розділювач (у назвах файлах його не повинно бути)<\/li>\n<li>filename01 — назва вашого майбутнього PDF-файлу, в який в який увійдуть сторінки з діапазону (без розширення .pdf)<\/li>\n<\/ul>\n<h2>bash + PDFtk<\/h2>\n<p>Для цього bash (потрібна версія 4 і вище, перевіряється у терміналі через <tt>bash -v<\/tt>, встановлюється через <tt> brew install bash<\/tt>) та <a href=\"https:\/\/www.pdflabs.com\/tools\/pdftk-server\/\">PDF Toolkit (PDFtk<\/a>).<\/p>\n<p>За допомогою ChatGPT в кілька ітерацій зробив скрипт, що бере вказаний PDF-файл, окремо бере текстову «маску» у TXT, як масив назв, в яких<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">#!\/bin\/bash\n\ninput_file=&quot;Tustan-Signs-All.pdf&quot;\ndata_file=&quot;range.txt&quot;\n\n# Read page ranges and custom names from the external file into a single array\nreadarray -t page_data &lt; &quot;$data_file&quot;\n\n# Loop through the array and split the PDF\nfor data in &quot;${page_data[@]}&quot;; do\n    IFS=&quot;=&quot; read -r range custom_name &lt;&lt;&lt; &quot;$data&quot;\n    output_file=&quot;${custom_name\/\/ \/_}.pdf&quot;  # Replace spaces with underscores in the custom name\n    pdftk &quot;$input_file&quot; cat $range output &quot;$output_file&quot;\n    echo &quot;$output_file — Done&quot;\ndone<\/code><\/pre><p>Для більшої універсальності я виніс вказання файлів, як аргументів у командному рядку. Тож тепер можна скопіювати скрипт у потрібну теку та запустити командою:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">bash splitter-pro.sh filename.pdf mask.txt<\/code><\/pre><p>де:<\/p>\n<ul>\n<li>filename.pdf — назва вашого PDF-файлу<\/li>\n<li>mask.txt — текстовий файл з «маскою»<\/li>\n<\/ul>\n<p>Сам скрипт виглядає так ($1 — перший аргумент, тобто PDF-файл; $2 — другий аргумент, тобто TXT-файл):<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">#!\/bin\/bash\n\ninput_file=$1\ndata_file=$2\n\n# Read page ranges and custom names from the external file into a single array. Requaire bash 4.0\nreadarray -t page_data &lt; &quot;$data_file&quot;\n\n# Loop through the array and split the PDF\nfor data in &quot;${page_data[@]}&quot;; do\n    IFS=&quot;=&quot; read -r range custom_name &lt;&lt;&lt; &quot;$data&quot;\n    output_file=&quot;${custom_name\/\/ \/_}.pdf&quot;  # Replace spaces with underscores in the custom name\n    pdftk &quot;$input_file&quot; cat $range output &quot;$output_file&quot;\n    echo &quot;$output_file — Done&quot;\ndone<\/code><\/pre><p>Приклад «маски», де спочатку номери сторінок, символ =, а далі назва файла (Проект-Знак-Точка-Розмір):<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">1-2=Tustan-WF-Sign-Т1-400x600\n3=Tustan-WF-Sign-Т2.1-200x350\n4=Tustan-WF-Sign-Т2.2-200x350\n5=Tustan-WF-Sign-Т3.1-200x350\n6=Tustan-WF-Sign-Т3.2-200x350\n7-8=Tustan-WF-Sign-Т4.1-T4.2-200x600\n9-10=Tustan-WF-Sign-Т4.3-T4.4-200x600\n11=Tustan-WF-Sign-Т5.1-200x600\n12=Tustan-WF-Sign-Т5.2-200x600\n13=Tustan-WF-Sign-Т6.1-200x600\n14=Tustan-WF-Sign-Т6.2-200x600\n15=Tustan-WF-Sign-Т7.1-200x600\n16=Tustan-WF-Sign-Т7.2-200x600\n17=Tustan-WF-Sign-Т8.1-200x600\n18=Tustan-WF-Sign-Т8.2-200x600\n19=Tustan-WF-Sign-Т9.1-200x600\n20=Tustan-WF-Sign-Т9.2-200x600\n21=Tustan-WF-Sign-Т9.3-200x600\n22-23=Tustan-WF-Sign-Т10-200x600\n…<\/code><\/pre><p>Весь процес виглядає ось так:<\/p>\n<div class=\"e2-text-video\">\n<video src=\"https:\/\/blog-archive.alexkolodko.com\/video\/tustan-wf-signs-automation-x2.mp4#t=0.001\" width=\"2560\" height=\"1507.1428571429\" controls alt=\"\" \/>\n\n<div class=\"e2-text-caption\">Розділення PDF-файлу по «масці»<\/div>\n<\/div>\n<p>Також можна цей підхід використовувати для нарізання макетів по одному і одразу з правильним перейменуванням файлів. Колись робив скрипт для перейменування пачки файлів, але тепер можна цей крок пропустити й робити все швидше.<\/p>\n<div class=\"e2-text-video\">\n<video src=\"https:\/\/blog-archive.alexkolodko.com\/video\/metromap-tram-x2.mp4#t=0.001\" width=\"2560\" height=\"1477.9676158571\" controls alt=\"\" \/>\n\n<div class=\"e2-text-caption\">Розділення на файли по одній сторінці<\/div>\n<\/div>\n<h2>Нюанси<\/h2>\n<p><b>№1. <\/b>Порядок артбордів\/сторінок у файлі має завжди зберігатись і співпадає з «маскою». Тож при зміні порядку, треба міняти й маску.<\/p>\n<p><b>№2. <\/b>При збереженні PDF з Ілюстратора рекомендую прибирати прапорець <i>Preserve Illustrator Editing Capabilities<\/i>. Так при розділенні PDF у файлі не буде нічого, що було поза потрібного артборду. Якщо ж цей прапорець увімкнутий, то навіть якщо ви бачитиме у прев’ю лише один артборд, все одно при відкритті файлу в Ілюстраторі в ньому будуть всі артборди й об’єкти, що були в оригінальному AI-файлі.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/blog-archive.alexkolodko.com\/pictures\/ai-save-pdf-settings.png\" width=\"1436\" height=\"1182\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Налаштування при збереженні PDF<\/div>\n<\/div>\n<p><b>№3. <\/b>Як і з будь-якою автоматизацією її треба уважно перевірити, коли створюєте. Наприклад, можна помилково вказати не ті сторінки в «масці» і файл нарізатиметься неправильно.<\/p>\n<h2>Бонус №1: запуск скрипку одразу в теці<\/h2>\n<p>Щоб ще прискорити процес і навіть не запускати консоль, то можна зібрати виконавчий файл .command, який запускатиме все в наявній теці.\u2028<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">#!\/bin\/bash\n\n# Change directory to be where the command is.\ncd &quot;$(cd &quot;$(dirname &quot;$0&quot;)&quot; &gt; \/dev\/null &amp;&amp; pwd)&quot;\n\u2028# Run script with arguments\nbash pdf-splitter.sh metromap_tram_v1.12.pdf Metromap-Tram-Range.txt<\/code><\/pre><p>Єдина маніпуляція, яку треба зробити — дати системі права на виконання скрипту в нашій теці:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">chmod u+x splitter.command<\/code><\/pre><p>Таким чином у теку копіюються сам bash-скрипт, маска .txt, вхідний .pdf та у command файлі замінюються значення. Тепер просто зберігаєте PDF, запускайте файл, п’єте каву ☕️, готово.<\/p>\n<div class=\"e2-text-video\">\n<video src=\"https:\/\/blog-archive.alexkolodko.com\/video\/command-file-x2.mov#t=0.001\" width=\"2560\" height=\"1469.3914014517\" controls alt=\"\" \/>\n\n<div class=\"e2-text-caption\">Скрипт упакований у виконавчий файл<\/div>\n<\/div>\n<h2>Бонус №2: артборди в AI → «маска»<\/h2>\n<p>Якщо ви називали артборди в Ілюстраторі так, як би ви хотіли мати готові файли, то можна теж це використати і скриптом вже в самому AI зберегти всі назви артбордів, як «маску» у текстовому файлі. Знову ChatGPT запропонував доволі простий скрипт, що робить на робочому столі готовий txt-файл з маскою.<\/p>\n<div class=\"e2-text-video\">\n<video src=\"https:\/\/blog-archive.alexkolodko.com\/video\/ai-artboards-to-txt-x2.mp4#t=0.001\" width=\"2560\" height=\"1470.8207705193\" controls alt=\"\" \/>\n\n<div class=\"e2-text-caption\">Робота скрипта<\/div>\n<\/div>\n<p>Трохи допиляв, що він робив одразу потрібний вигляд:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">\/\/ Function to export artboard names to a text file\nfunction exportArtboardNames() {\n    var doc = app.activeDocument;\n    var artboards = doc.artboards;\n    var file = new File(&quot;~\/Desktop\/artboard_names.txt&quot;);\n    file.open(&quot;w&quot;);\n\n    for (var i = 0; i &lt; artboards.length; i++) {\n        var artboard = artboards[i];\n        var artboardName = artboard.name;\n        file.writeln(&quot;&quot; + (i + 1) + &quot;=&quot; + artboardName);\n    }\n\n    file.close();\n    alert(&quot;Artboard names exported to ~\/Desktop\/artboard_names.txt&quot;);\n}\n\n\/\/ Run the exportArtboardNames function\nexportArtboardNames();<\/code><\/pre><p>Напевно було б можна написати скрипт саме для Ілюстратора, який би з «маскою» зберігав певні артборди, але всі подібні скрипти в Adobe Illustrator працюють доволі повільно. Тому найшвидше створювати конвеєр іншими інструментами.<\/p>\n<h2>Бонус №3: зробити зі скрипта окрему cli-програму (Mac OS)<\/h2>\n<p>Копіювати скрипт у кожну теку не зручно, тож можна піти далі і зробити з цього скрипта cli-програму, яку можна буде викликати просто у певній теці одразу з терміналу (описав як зробити це у Mac OS, але думаю у Windows це так само можливо; якщо хтось напише як це зробити, то додам у статтю).<\/p>\n<p>Для цього модифікуємо спочатку сам скрипт. У першому рядку міняємо шлях до bash:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">#!\/usr\/local\/bin\/bash\n\ninput_file=$1\ndata_file=$2\n\n# Read page ranges and custom names from the external file into a single array. Requaire bash 4.0\nreadarray -t page_data &lt; &quot;$data_file&quot;\n\n# Loop through the array and split the PDF\nfor data in &quot;${page_data[@]}&quot;; do\n    IFS=&quot;=&quot; read -r range custom_name &lt;&lt;&lt; &quot;$data&quot;\n    output_file=&quot;${custom_name\/\/ \/_}.pdf&quot;  # Replace spaces with underscores in the custom name\n    pdftk &quot;$input_file&quot; cat $range output &quot;$output_file&quot;\n    echo &quot;$output_file — Done&quot;\ndone<\/code><\/pre><p>Потім краще прибрати розширення і назвати файл так, як ви будете викликати команду. У моєму випадку — <i>pdfsplitter<\/i>.<\/p>\n<p>Далі скопіювати файл у директорію \/<i>usr\/local\/bin<\/i>, можна одразу в терміналі:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">sudo cp pdfsplitter \/usr\/local\/bin<\/code><\/pre><p>Тепер можна у терміналі викликати нашу команду. Якщо ж при цьому буде відображатись помилка доступу, на кшталт, «<i>zsh: permission denied: pdfsplitter<\/i>», то треба дати системі дозвіл використати нашу програму. Наприклад, командою:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">chmod 755 \/usr\/local\/bin\/pdfsplitter<\/code><\/pre><p>Відтепер ви самі додали програму у термінал і її можна запускати у будь-якій теці, не копіюючи туди скрипт.<\/p>\n<div class=\"e2-text-video\">\n<video src=\"https:\/\/blog-archive.alexkolodko.com\/video\/script-as-cli-program-x2.mp4#t=0.001\" width=\"2560\" height=\"1470.8207705193\" controls alt=\"\" \/>\n\n<div class=\"e2-text-caption\">Скрипт, як cli-програма<\/div>\n<\/div>\n<p><hr><br \/>\nЗавантажити скрипти:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.dropbox.com\/scl\/fi\/zpdpqvcjau4ps7qaoqn9b\/pdf-splitter.sh?rlkey=nsgiia85dj5noveqgoab3o9hz&dl=0\">pdf-splitter.sh<\/a> — розділювач PDF<\/li>\n<li><a href=\"https:\/\/www.dropbox.com\/scl\/fi\/sequwpl5crthcnsyb8pfn\/artboard-names-to-file.jsx?rlkey=0eysee0w68fa99c8yg9vpu4p4&dl=0\">artboard-names-to-file.jsx<\/a> — назви артбордів AI у TXT файл<\/li>\n<li><a href=\"https:\/\/www.dropbox.com\/scl\/fi\/303ikqdr93bt0ypzwgzet\/splitter.command?rlkey=7uj309zmg2ijodxpqr42zx1qo&dl=0\">splitter.command<\/a> — приклад виконавчого файлу запуску скрипта; має розміщуватись в одній теці з маскою та pdf-splitter.sh.<\/li>\n<\/ul>\n<p><hr><\/p>\n<div><div style=\"float: left;\"><p><span style=\"font-weight:bold; font-size: 3em\"><b>₴<\/b><\/span><\/p>\n<\/div><div style=\"padding: 1em 0 0 4em\"><p>Якщо вам було цікаво та корисно, можете пригостити мене кавою ☕️: картка Монобанку: <tt>4441114450427339<\/tt> або <a href=\"https:\/\/send.monobank.ua\/5jVrTaRziu\">через сайт<\/a>.<\/p>\n<\/div><\/div>",
            "date_published": "2023-11-30T17:07:41+02:00",
            "date_modified": "2023-12-05T13:07:07+02:00",
            "tags": [
                "chatgpt",
                "інструменти",
                "автоматизація",
                "дизайн-конвеєр",
                "конвеєр"
            ],
            "image": "https:\/\/blog-archive.alexkolodko.com\/pictures\/ai-file.jpg",
            "_date_published_rfc2822": "Thu, 30 Nov 2023 17:07:41 +0200",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "124",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/ai-file.jpg",
                    "https:\/\/blog-archive.alexkolodko.com\/pictures\/ai-save-pdf-settings.png"
                ]
            }
        }
    ],
    "_e2_version": 4134,
    "_e2_ua_string": "Aegea 11.3 (v4134)"
}