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

Мне понадобилось переименовать сразу 157 файлов в описанном репозитории по следующему принципу:

00-00_имя-файла.ext   # было
00-000_имя-файла.ext  # стало, добавился '0'

В этом блоке кода показаны шаблоны. Вместо .ext могут быть разные расширения (в моем случае это расширения .cpp и .h). Вместо имя-файла могут быть разные названия из нескольких слов, эти названия могут быть разной длины. Вместо 00-00 могут быть, например, следующие последовательности символов: 00-0100-02, ..., 01-0001-01, ..., 02-0002-0102-02 и так далее. То есть мне понадобилось расширить второй номер, который идет после дефиса, с двух разрядов до трех, поэтому мне нужно переименовать все файлы, добавляя символ 0 в указанное выше место в названии файлов.

Я знаю, как через веб-интерфейс «Гитхаба» можно переименовывать файлы по одиночке, об этом можно прочитать в отдельной статье документации «Гитхаба», но там не описано, как переименовать сразу множество файлов проекта. Быстро, одной операцией, это сделать у меня не получилось, поэтому я разбил задачу на несколько более простых пунктов.

План действий

  1. Клонировать репозиторий (создать копию) на свой компьютер;

  2. Написать скрипт для переименования множества файлов проекта и переименовать их;

  3. Создать коммит со всеми переименованиями;

  4. Отправить изменения в оригинальный репозиторий на «Гитхабе».

1. Клонирование репозитория на свой компьютер

Я работаю в операционной системе «Windows 10» и пользуюсь программой (системой управления версиями) «Git for Windows» из командной строки. В качестве программы-оболочки я использую «PowerShell» версии 7. В качестве программы-«эмулятора терминала» использую «Windows Terminal».

Клонирование (создание копии) репозитория с «Гитхаба» на мой компьютер (иногда я буду сокращать путь к текущему местоположению с помощью многоточия ..., чтобы команда влезла в формат статьи):

PS C:\...\repos> git clone https://github.com/ilyachalov/learncpp-com-examples

Команде git clone просто передаём URL-адрес репозитория на «Гитхабе». Авторизация при этом не требуется. Насколько я понимаю, это потому, что этот мой репозиторий публичный. В результате этой команды в текущем местоположении создалась папка «learncpp-com-examples» с файлами репозитория. Для дальнейших действий удобнее перейти в эту папку и работать из нее.

PS C:\Users\Илья\source\repos> cd learncpp-com-examples
PS C:\Users\Илья\source\repos\learncpp-com-examples>

Для удобства далее я буду обозначать это местоположение так:

PS ..\learncpp-com-examples>

2. Скрипт для переименования файлов и его применение

За основу скрипта я взял код из примера 4 статьи про командлет «Rename-Item» документации программы-оболочки «PowerShell». Я переписал тот код под свои нужды, добавил регулярные выражения и получил следующее:

файл «rename-files.ps1» (в кодировке UTF-8 без BOM, окончания строк CRLF)

Get-ChildItem -File -Recurse |
    Rename-Item -NewName {
        $_.Name -replace '^(\d\d)-(\d\d)_(.*)', '$1-0$2_$3'
    }

Данный скрипт просматривает только файлы (папки отбрасываются, это обеспечивается параметром -File командлета «Get-ChildItem»), начиная с текущей папки и вглубь, во вложенных папках (это обеспечивается параметром -Recurse командлета «Get-ChildItem»). Командлет «Get-ChildItem» отбирает все файлы, поэтому параметр -Path командлету «Get-ChildItem» не требуется, он опущен. Файлы, отобранные командлетом «Get-ChildItem», передаются по конвейеру | командлету «Rename-Item», который и выполняет переименования.

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

файл «rename-files.ps1» (в кодировке UTF-8 без BOM, окончания строк CRLF)

$total = 0
$renamed = 0
Get-ChildItem -File -Recurse |
    Rename-Item -NewName {
        $old = $_.Name
        $new = $old -replace '^(\d\d)-(\d\d)_(.*)', '$1-0$2_$3'
        $script:total++
        if ($old -ne $new) {
            Write-Host "$old --> $new"
            $script:renamed++
        } else {
            Write-Host "$new"
        }
        $new
    }
"Проверено файлов всего: $total, из них переименовано: $renamed"

У меня есть более подробный разбор этого скрипта.

Для переименования файлов я поместил файл «rename-files.ps1» со скриптом в нужную папку клонированного репозитория и запустил его:

PS C:\Users\Илья\source\repos\learncpp-com-examples\chapters> .\rename-files
rename-files.ps1
00-00_helloworld.cpp --> 00-000_helloworld.cpp
00-01_helloworld-wait.cpp --> 00-001_helloworld-wait.cpp
00-02_cpp17compat.cpp --> 00-002_cpp17compat.cpp
00-03_cpp20compat.cpp --> 00-003_cpp20compat.cpp
01-00_snippet.cpp --> 01-000_snippet.cpp
...
02-98_io.cpp --> 02-098_io.cpp
02-98_main.cpp --> 02-098_main.cpp
02-99_io.cpp --> 02-099_io.cpp
02-99_io.h --> 02-099_io.h
02-99_main.cpp --> 02-099_main.cpp
Проверено файлов всего: 158, из них переименовано: 157

После окончания переименования файл «rename-files.ps1» скрипта следует из папки проекта удалить, чтобы он не мешал при создании коммита.

3.1. Проверка настроек Git-репозитория

Перед созданием коммита, который позже попадет на «Гитхаб», имеет смысл проверить настройку имени автора коммита и адреса электронной почты автора коммита, если вы не хотите «светить» их в интернете.

Для проверки настроек Git-репозитория удобно использовать следующую команду из папки проекта (благодаря параметру --show-origin вы сможете увидеть, в каких файлах хранятся настройки Git-репозитория; часто разные настройки хранятся в разных файлах):

PS ..\learncpp-com-examples> git config --list --show-origin

Чтобы просмотреть только две интересующие меня настройки (имя автора коммита, его адрес электронной почты), можно использовать следующие две команды:

PS ..\learncpp-com-examples> git config user.name
Ilya Chalov
PS ..\learncpp-com-examples> git config user.email
почта@домен.ru

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

Этот «служебный» адрес электронной почты можно посмотреть в настройках своей учетной записи на «Гитхабе» (меню «Settings / Emails», если заходить через свою аватарку в правом верхнем углу страниц веб-сервиса) по следующему URL-адресу (он сработает, если вы уже авторизованы на веб-сервисе):

Меню «Settings / Emails» (если заходить через свою аватарку)
https://github.com/settings/emails

Меняю адрес электронной почты в настройках текущего (параметр --local) Git-репозитория:

PS ..\learncpp-com-examples> git config --local user.email служебный@github.com

3.2. Создание коммита со всеми переименованиями

Команду git mv я не смог использовать для переименований, так как в ней, вроде бы, нельзя использовать регулярные выражения (можно использовать символы-джокеры, но их недостаточно). Однако, как пишут в известной книге про «Git», на самом деле команда git mv — это совмещение трех команд: 1) переименование файла средствами операционной системы или с помощью других программ, 2) git rm для файла с названием до переименования, 3) git add для файла с названием после переименования.

Пункт первый из трех вышеперечисленных я уже выполнил ранее с помощью своего скрипта «rename-files.ps1». Оставшиеся два пункта можно выполнить для всех 157 переименованных файлов одной следующей командой:

PS ..\learncpp-com-examples> git add --all

Теперь все изменения помещены в индекс и можно, наконец, создать коммит:

PS ..\learncpp-com-examples> git commit -m "Переименование группы файлов (157 штук)"

4. Отправка изменений в оригинальный репозиторий на «Гитхабе»

При отправке изменений в оригинальный репозиторий на «Гитхабе» потребуется авторизация. Когда я попытался ввести свой пароль, «Гитхаб» сообщил мне, что с 13 августа 2021 года аутентификация с помощью пароля больше не используется. Мне было предложено пройти в документацию по следующей ссылке и почитать про действующие способы аутентификации.

Я выбрал способ аутентификации с помощью токена доступа и создал гранулированный токен доступа (сейчас на «Гитхабе» есть две действующие реализации токенов доступа: старая (классическая) и новая (гранулированные токены доступа, по-английски «fine-grained access token»)). У меня есть отдельная подробная статья про создание гранулированного токена доступа. Использовать токен доступа несложно: при аутентификации его нужно просто ввести (вставить из буфера обмена) вместо пароля.

Отправляю изменения в оригинальный репозиторий на «Гитхабе»:

PS C:\Users\Илья\source\repos\learncpp-com-examples> git push origin main
Username for 'https://github.com': ilyachalov
Password for 'https://ilyachalov@github.com':

При вводе пароля (в моем случае — токена доступа) ввод не отражается в окне консоли, но в действительности происходит. Вероятно, такой подход принят в целях безопасности, чтобы никто из посторонних не мог увидеть длину вводимой последовательности символов.

Заключение

После отправки изменений на «Гитхаб» я открыл оригинальный репозиторий в браузере и проверил получение отправленного коммита. Всё получилось так, как я и планировал. Вот ссылка на коммит с переименованием сразу 157 файлов в оригинальном репозитории.

Комментарии (54)


  1. smind
    01.07.2023 21:29
    +36

    т.е. вы сделали:
    git pull
    rename_some_files
    git add .
    git commit -m "renamed files"
    git push
    про это статья?


    1. ilyachalov Автор
      01.07.2023 21:29
      -17

      В частности, и про это тоже.

      Я недавно начал использовать Git и GitHub. Цель написания этой статьи — возможное получение полезных советов от опытных пользователей. Я думал, возможно, кто-нибудь посоветует альтернативные способы переименования множества файлов, более оптимальные, чем я описал.


      1. Lainhard
        01.07.2023 21:29
        +20

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

        Знаете, я недоволен.????


        1. ilyachalov Автор
          01.07.2023 21:29
          -5

          Я могу вас понять. С другой стороны, как автор может определить необходимый уровень статьи, который подходит для Хабра? Я не видел в справке Хабра никаких конкретных условий по этому поводу. Я готов соблюдать такие условия, если их пропишут.


        1. ZEvS_Poisk
          01.07.2023 21:29
          -9

          Когда-то Ричард Фейнман взорвал бутылку в институтской лаборатории. Взорвал в результате эксперимента. И ещё ректор изрёк, что опыты новичков должны проводится в лаборатории для новичков... Фейнман стал нобелевским лауреатом.
          О чем я? Выводы сами делайте.
          Если не хотите читать такие статьи, то может плашку-хештег придумать "для новичков".
          P.S. не судите человека строго.


          1. Areso
            01.07.2023 21:29

            Ну вот, плашку уже придумали, она отображается перед тем как зайти. Мы ее здесь обсудили https://habr.com/ru/articles/745312/#comment_25708846


          1. dopusteam
            01.07.2023 21:29
            +8

            О чем я?

            Ни о чем


        1. fedorro
          01.07.2023 21:29
          +1

          Эта претензия скорее к администрации Хабра их политике - "Даешь любой контент, главное больше конверсии" (возможно за исключением совсем лютого трэша и запрещенки, возможно рекламы в обход партнерок).


      1. dolovar
        01.07.2023 21:29

        Цель написания этой статьи — возможное получение полезных советов от опытных пользователей.

        Обратите внимание на существование рядом ресурса для получения советов и прочих ответов на вопросы: qna.habr.com


        1. ilyachalov Автор
          01.07.2023 21:29

          Хорошее замечание, спасибо. Как-то забыл про этот сервис (в отличие от Stack Overflow, на котором я задал вопрос, но отклика пока не получил). Но я не уверен, что на указанном сервисе можно задавать вопросы с большим текстом (сравнимым по размерам со статьей), содержащим разное сложное форматирование. Я заходил туда, там обычно вопросы на несколько абзацев и почти без форматирования. Этого недостаточно.


  1. cat_chi
    01.07.2023 21:29
    +29

    В статье я рассказываю, как в репозитории веб-сервиса «GitHub» можно переименовать сразу множество файлов одним коммитом.

    Простите, но мне кажется, что вам рановато писать статьи. Для начала стоило бы их почитать...

    Например, о том, что такое git вообще. Потому что единственная причина, которая могла послужить для создания этой статьи и которая приходит мне в голову – в том, что вы вообще не понимаете, что такое github и зачем он нужен. Для вас это какая-то магическая сущность которая работает по каким-то магическим принципам.

    Почитайте. Разберитесь. И поймите, что писать пространные статьи о настолько рутинных операциях, которые буквально каждый разработчик делает несколько раз в день, на Хабре – это плохая идея. Вас просто не поймут.


    1. ilyachalov Автор
      01.07.2023 21:29
      -2

      Вы правы, я многого не понимаю. Если вам несложно, может быть, вы дали бы мне какие-нибудь более конкретные замечания? Я был вам за это благодарен.

      вы вообще не понимаете, что такое github и зачем он нужен

      Я использую этот веб-сервис для хранения файлов с кодом. Это удобно. От администрации веб-сервиса я никаких страйков за это не получал, значит, мне кажется, всё в порядке.

      поймите, что писать пространные статьи о настолько рутинных операциях, которые буквально каждый разработчик делает несколько раз в день, на Хабре – это плохая идея. Вас просто не поймут.

      Вы молодец, у вас много знаний. Но я рассчитывал на людей, которые только начинают изучать Git, GitHub и так далее. Такие есть, их много. Для них эта статья будет интересной и полезной.

      Дело в том, что опытные разработчики не будут писать такие статьи, как вы и сказали сами, потому что для них это слишком просто. Откуда тогда начинающим разработчикам узнавать основы? Кто пишет для них? Мне кажется, Хабр предназначен не только для опытных разработчиков, но и для начинающих.


      1. Areso
        01.07.2023 21:29
        +2

        Средний

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


        1. ilyachalov Автор
          01.07.2023 21:29
          -10

          При выборе уровня «Средний» я ориентировался на справку Хабра. Там сказано, что «Средний» уровень подразумевает знание читателем основ, которые автор не будет разъяснять. В данной статье я не объясняю, что такое «Git», для чего нужен «GitHub», как работать из командной строки и что это такое, что такое программа-оболочка, что такое программа-«эмулятор терминала», что такое регулярные выражения, что такое скрипт и так далее. То есть в этой статье огромное количество терминов, которые читатель должен знать и понимать, я это всё не разъясняю. Поэтому уровень статьи «Средний», хотя я бы с удовольствием выбрал «Простой», но данная статья объективно ему не соответствует.


          1. Daimonn
            01.07.2023 21:29

            то, что вы написали в статье это тоже основы основ


            1. ilyachalov Автор
              01.07.2023 21:29
              -2

              Мне кажется, нужна более сложная классификация. Вместо простой-средний-сложный, нужно что-то вроде

              • для вообще начинающих (домохозяйка)

              • для начинающих, но знакомых с основами (джуниор)

              • для среднего уровня (сеньор)

              • для сложных тем (тимлид)

              И описание этих категорий, наверное, стоит сделать более подробным.


              1. ryanl
                01.07.2023 21:29

                У лида квалификация не выше Сеньора, скорее наоборот, так как он загружен больше административной работой.


      1. orenty7
        01.07.2023 21:29
        +3

        Я не автор начального комента, но попробую ответить. Ваша статья техническая. Обычно стрельнувшие технические статьи содержат или крутую идею, или реализацию чего-то по-настоящему сложного. Эта не содержит сложной идеи и при этом является комбинацией работы с PowerShell и git. Инструкции к каждому из этих инструментов легко гуглятся, как и готовые примеры к ним. Формально в вашей статье ничего неправильного нет, но зачем она, если такой скрипт собирается просто гуглингом? Имхо, это не уровень хабра

        P.S. Примеры крутых статей:

        1. https://habr.com/ru/articles/590469/

        2. https://habr.com/ru/articles/463957/

        3. https://habr.com/ru/articles/101810/


  1. Areso
    01.07.2023 21:29
    +5

    Автор, то, что вы сделали - это подходит только для случая write-once файлов. То есть вам не нужен git blame для них.

    git mv, с рядом оговорок, сохраняет историю изменений; ваше не делает так (тоже с оговорками, впрочем).

    Как бы сделал я:

    find . -name "*" -exec  sh -c 'x={}; git mv "$x" $(echo $x | sed 's/-/-0/g')' \;


    1. mc2
      01.07.2023 21:29
      +2

      На всякий случай, можно дополнительно указать для find -type f


    1. ilyachalov Автор
      01.07.2023 21:29
      -2

      Я работаю в «Windows 10», не в «Linux», но спасибо за ваш код. Насколько я понял, вы предлагаете таки использовать команду git mv, но до ее запуска в строке конструировать параметры для нее в нужном виде. Таким образом, всё же можно будет использовать регулярные выражения, несмотря на то, что git mv сама по себе их не поддерживает.

      Думаю, это можно реализовать и в PowerShell.


      1. saboteur_kiev
        01.07.2023 21:29
        +5

        вы может быть удивитесь, но попробуйте выполнить вышеуказанную команду в виндовс, где стоит гит, и обнаружите что вместе с гитом у вас теперь на виндовс есть и find и sed и даже git-bash


        1. ilyachalov Автор
          01.07.2023 21:29

          Спасибо за подсказку. Я попробую этим воспользоваться. Но мне так же интересно попробовать переписать это и на PowerShell.


      1. rezdm
        01.07.2023 21:29
        +1

        UnixUtils

        uutils

        ...

        git/bash

        Это всё прекрасно работает в Windows, и там всё это можно делать. В PS тоже можно, конечно.


      1. serge-sb
        01.07.2023 21:29
        +2

        Даже если не брать в расчёт "десятку" (о чём уже написали в комментариях до меня), то начиная с самых древних винд (а может и в досах это уже было? UPD: появилось в досе со второй версии) есть конструкция FOR. Дальше только дело техники вычленить нужные части имени файла и соорудить новое имя.


    1. fshp
      01.07.2023 21:29

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

      Однако это дорого, поэтому есть лимиты на количество сравниваемых файлов в угоду производительности, которые по умолчанию довольно низкие.


      1. Areso
        01.07.2023 21:29
        +1

        Я об этом вспомнил и вставил оговорку.

        Плюс хорошо разделять переименование и изменение содержимого файлов на разные коммиты.


    1. ryanl
      01.07.2023 21:29

      А еще есть утилита rename, которая на вход умеет wildcard-ы принимать.

      Кстати, На DistroTube-канале у Derek Taylor есть видос, где довольно много способов переименования описано.


    1. iig
      01.07.2023 21:29

      Ну не знаю.. Оно попытается что-то сделать с файлами внутри .git, у него не получится, но осадочек останется. Еще меня смущает, если мы переименовали файл - не найдет ли его find повторно?


      1. Areso
        01.07.2023 21:29

        Да, это спорный скрипт; но я его сделал за 5 минут, он выполнил задачу (я специально сделал тестовый репозиторий, создал в нём файлы по маске, и поделал в них изменения), и вроде бы последствий на тестовой репе не было.
        Поэтому я его привёл как рабочий пример (идею), который можно дальше тюнить в любую сторону.


    1. ilyachalov Автор
      01.07.2023 21:29

      Я написал что-то похожее на PowerShell:

      Get-ChildItem -File -Recurse |
          ForEach-Object {
              $old = $_.Name
              $new = $old -replace '^(\d\d)-(\d\d)_(.*)', '$1-0$2_$3'
              if ($old -ne $new) {
                  $path = $_.DirectoryName
                  Invoke-Expression "git mv $path\$old $path\$new"
              }
          }

      Спасибо еще раз за подсказку, плюсанул в карму.


  1. selivanov_pavel
    01.07.2023 21:29
    +27

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


    1. radioxoma
      01.07.2023 21:29
      +2

      Я выключил и включил.


      1. Oceanshiver
        01.07.2023 21:29
        +12

        Ну это можно на две статьи разбить, все же сложная тема


    1. Exosphere
      01.07.2023 21:29

      Сессия закончилась :-)


    1. iig
      01.07.2023 21:29

      Самый короткий рассказ, способный растрогать кого угодно.

      Я что-то нажал и все пропало. :D


  1. vitaly_il1
    01.07.2023 21:29
    +5

    Коллеги, по-моему, вы уж слишком напали на автора.
    Все когда-то начинали.


    1. tommyangelo27
      01.07.2023 21:29
      +13

      Но не все писали об этом на Хабр


      1. IvanPetrof
        01.07.2023 21:29
        +1

        Каждый раз про это думаю, когда вижу неожиданно заплюсованную статью, которую мог бы написать и сам.. но... Проклятый синдром самозванца..


  1. delphinpro
    01.07.2023 21:29
    +7

    Написать скрипт для переименования множества файлов проекта и переименовать их;

    Скрипт, конечно, получился несложный и пишется быстро, если хорошо знаешь PowerShell, но я бы обошелся функционалом "Групповое переименование" в Total Commander.

    В остальном статья совсем не про переименование файлов, а про то, как клонировать репу, делать коммит и пуш. Эти примитивные операции описаны в учебнике по гиту на https://git-scm.com/book/ru/v2


    1. ilyachalov Автор
      01.07.2023 21:29
      -2

      Мне интереснее написать скрипт на PowerShell.

      Эти примитивные операции описаны в учебнике по гиту

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


  1. grvelvet
    01.07.2023 21:29
    -3

    HetmanSoftware перелогиньтесь


  1. 13werwolf13
    01.07.2023 21:29
    +2

    несмотря на заголовок (и частое отхождение в теле статьи) это статья не про git (и уж тем более не про github) а про то как накостылять на powershell то что без него можно сделать в одну строку (что выше и показали).
    я так понимаю про git автор добавил исключительно потому что иначе текста было маловато, а github приплёл просто за компанию.


    1. randomsimplenumber
      01.07.2023 21:29
      +2

      Powershell не умею, но получилось ужасно. Среди 100500 способов переименовать файлы автор выбрал, пожалуй, самый странный. Интересно, как так получилось, что у него в репозитории все файлы .cpp оказались вот с такими вот именами? И какую задачу призвано решить переименование?


      1. ilyachalov Автор
        01.07.2023 21:29

        Среди 100500 способов переименовать файлы автор выбрал, пожалуй, самый странный.

        Мне нравится язык PowerShell, поэтому я пишу скрипты на нем. Но эта статья написана в том числе и для того, чтобы узнать возможные альтернативы. Кое-что мне посоветовали в комментариях. Я благодарен тем, кто посоветовал.

        Интересно, как так получилось, что у него в репозитории все файлы .cpp оказались вот с такими вот именами?

        Я читаю учебник по языку C++ и создаю файлы с кодом для всех примеров и упражнений из этого учебника. Файлы нумерую по принципу 00-00, где первые две цифры — для номера главы учебника, следующие две цифры (после дефиса) — номер примера/упражнения в рамках главы.

        И какую задачу призвано решить переименование?

        Количество примеров/упражнений в рамках главы превысило 99 штук, цифр стало не хватать, этого я изначально не предвидел. Поэтому решил увеличить место для номера с двух до трех цифр. Теперь доступна нумерация до 999 штук.


        1. voldemar_d
          01.07.2023 21:29
          +1

          Я читаю учебник по языку C++ и создаю файлы с кодом для всех примеров и упражнений из этого учебника

          Подход понятен. В этом учебнике нет рекомендаций по поводу того, что все сущности в программах нужно называть осмысленно? И переменные, и функции, и классы, и сами файлы? Не должно быть названий вроде "MyStruct", "SomeClass", "CoolProject" и "00.cpp", "001.cpp" и т.д. Даже в учебных и тестовых проектах нужно приучать себя давать везде и всему осмысленные названия.


          1. ilyachalov Автор
            01.07.2023 21:29

            У меня осмысленные названия, их можно увидеть в статье. Например:

            00-000_helloworld.cpp
            00-001_helloworld-wait.cpp
            00-002_cpp17compat.cpp
            ...и так далее

            За осмысленность отвечает часть названия, которая идет после нумерации. Там, где автор учебника даёт названия файлам, я оставляю авторские названия, только добавляю свою нумерацию в начало названия файла (автор учебника не всем файлам дает достаточно информативные названия, потому что это лишь учебные примеры; сам учебник достаточно хорош, там о наименовании файлов, переменных и т.п. довольно емко написано).


            1. iig
              01.07.2023 21:29

              КМК 00-000_helloworld.cpp ничем не лучше 0-0_helloworld.cpp.


              1. ilyachalov Автор
                01.07.2023 21:29

                При просмотре списка файлов при вашем подходе файлы в списке могут отсортироваться не по порядку (зависит от системы и от способа сортировки).


                1. iig
                  01.07.2023 21:29

                  Если это не плейлист для автоматического плеера - неважно. Сбой будет в ровно 1 месте, при переходе 99-100. Я сомневаюсь, что у вас больше 200 примеров в главе ;) И вы же их по папкам (глава == папка) раскидали? Раскидали, правда? ;)


        1. randomsimplenumber
          01.07.2023 21:29

          После 00-99 спокойно следует 00-100 ;) Можно спокойно оставить как было, ничего для программного кода не изменится.

          ЗЫ: у меня достаточно часто возникает похожая задача с переименованием чужих картинок. Чтобы порядок в слайдшоу не ломался. Это 1 строчка на bash, но никак не статья в хабр.

          ЗЫЫ: складывать 100500 файлов с программным кодом, никак друг с другом не связанных, в одну папку - это ужасно. Идея о вложенных папках должна возникнуть не позже чем на 11 задании ;)


          1. ilyachalov Автор
            01.07.2023 21:29

            После 00-99 спокойно следует 00-100

            Конечно, можно было и так, но это неудобно из-за сортировки. Некоторые системы, в которых я просматриваю списки файлов, отображают файлы так, что файл 00-100 идет в списке вместе с файлами 00-10, 00-11, 00-12 и т.д., а не после 00-99, как мне нужно. Насколько я помню, в веб-интерфейсе «Гитхаба» файлы сортируются именно так.

            Это 1 строчка на bash, но никак не статья в хабр.

            Тут не просто переименование файлов или переименование файлов в Git-репозитории, а переименование файлов на веб-сервисе «Гитхаб». Я думал, что мне посоветуют какой-нибудь способ автоматизации на самом этом веб-сервисе. Там, вроде, есть средства автоматизации, но я с ними незнаком. Пока ничего такого не посоветовали, к сожалению.

            складывать 100500 файлов с программным кодом, никак друг с другом не связанных, в одну папку - это ужасно

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


  1. voldemar_d
    01.07.2023 21:29

    Я делаю этот проект для людей, которые будут учиться по данному учебнику

    ИМХО, весьма ограниченная аудитория у статьи получается. Я ни разу не видел ни в одном проекте такого.


  1. DieSlogan
    01.07.2023 21:29

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

    $ErrorActionPreference = "Stop"