Имена файлов как часть интерфейса
Имя связывает файл с человеком, скриптом и следующей версией процесса.
Контракт начинается до чтения
Пользователь сначала видит имя, а уже затем содержимое. Скрипт тоже часто выбирает вход по имени: ищет расширение, суффикс даты или ожидаемый префикс. Поэтому переименование может сломать процесс, даже если байты остались прежними. Для регулярной выгрузки полезно заранее определить, какие части имени постоянны, а какие обозначают период, версию схемы или номер части.
Название report-final-new.csv не задаёт порядок версий. Через месяц невозможно уверенно понять, относится ли final к содержимому или к этапу согласования. Более устойчивое имя содержит предмет и однозначный период: trees-2026-02.csv. Если период означает месяц наблюдения, а не месяц экспорта, это нужно записать в описании набора. Одна дата не должна молча выполнять обе роли.
Что стоит кодировать в имени
В имени удобно хранить короткие признаки выбора: объект, период, номер части, расширение. Длинное происхождение, SQL-запрос, параметры фильтрации и полную схему лучше вынести в manifest. Имя остаётся пригодным для терминала и файлового менеджера, а дополнительные сведения получают явные поля с проверяемыми типами. Установите ограничение длины и разрешённый набор символов для автоматически создаваемых имён.
Номер части стоит дополнять нулями, если каталог сортируют лексикографически: part-0002 идёт раньше part-0010. Но фиксированная ширина тоже имеет предел, и проверка генератора должна обнаружить его до публикации. Для времени используйте безопасную запись без двоеточий, если файлы будут переноситься на Windows. Символы, допустимые на одной файловой системе, не обязательно переносимы на другую.
Граница доверия
Имя из архива или внешнего JSON нельзя напрямую соединять с каталогом назначения. Абсолютный путь, компонент .. и символьная ссылка способны вывести запись за ожидаемое дерево. Проверяйте не только текст имени, но и фактическую политику распаковки. Для собственных загрузок проще назначать имена из небольшого разрешённого списка, а исходное внешнее имя хранить как метаданные.
Пробелы сами по себе не являются ошибкой, но требуют корректных кавычек в shell. Перевод строки в имени делает построчные списки неоднозначными. Поэтому безопасный внутренний набор имён часто ограничивают ASCII-буквами, цифрами, точкой, дефисом и подчёркиванием. Это инженерное ограничение конкретного процесса, а не требование форматов CSV или JSON.
Переименование в рабочем процессе
Отдельно проверьте, как имя проходит через почту, браузер и командную строку. Скачивание иногда добавляет номер к повторному имени, а файловый менеджер скрывает известное расширение. Если пользователь проверяет хеш, он должен знать, что переименование не меняет байты, но меняет путь в checksums.txt. Для ручного процесса лучше дать команду с одним явно названным файлом и пояснить каталог запуска. Для автоматического процесса источником списка служит manifest, а не визуальная сортировка окна. Имена временных файлов не должны совпадать с публичными, чтобы незавершённый результат не приняли за готовую выгрузку. Переименование части набора требует обновить все ссылки и проверить отсутствие старых записей в манифесте.
Проверка соглашения
Возьмите три будущих случая: исправление прошлого месяца, смену схемы и разделение большого файла. Попробуйте дать каждому результату имя так, чтобы старые ссылки не поменяли смысл. Если для этого приходится добавлять new2 или final-final, соглашение ещё не описывает версии. Лучше различать неизменяемый снимок и указатель на актуальную версию.
В manifest укажите имя, размер, SHA-256 и версию схемы. Проверьте уникальность имён до записи файлов, затем сопоставьте manifest с фактическим каталогом. Не помещайте адрес электронной почты, токен или идентификатор пользователя в публичное имя: даже удаление содержимого не уберёт его из журналов доступа и истории ссылок.
Миграцию имён проводите как изменение интерфейса. Опубликуйте соответствие старых и новых путей, обновите внутренние ссылки, проверьте чувствительность к регистру и Unicode-нормализацию на целевой системе. Каталог, где два имени отличаются только регистром, может корректно существовать на Linux и конфликтовать на другой платформе. Эти проверки дешевле потери единственной копии при переносе.