Команда touch: изменение меток времени и создание пустых файлов

Быстрые ссылки
- Использование команды touch
- Комбинирование опций для отдельных времён доступа и изменения
- Создание пустых файлов
Каждый файл в файловой системе хранит метки времени: время последнего доступа (atime) и время последнего изменения содержимого (mtime). Команда touch позволяет просматривать и изменять эти метки, а также создать пустой файл. Ниже — подробное руководство, практические примеры и готовые шаблоны для разных задач.
Использование команды touch
Команда touch доступна в большинстве окружений с оболочкой Bash: Linux, macOS, а также Windows при наличии WSL или Cygwin. Ниже — основные опции и их поведение.

Чтобы увидеть текущие метки времени файла, используйте команду stat:
stat file
Замените file на имя вашего файла или путь к нему.
Опции -a и -m
- -a обновляет только время последнего доступа (atime) до текущего времени.
- -m обновляет только время последнего изменения (mtime) до текущего времени.
Примеры:
touch -a file
touch -m file
Если указанный файл не существует и не задан параметр -c, touch создаст пустой файл с указанным именем.
Опция -c
- -c (или –no-create) запрещает создание файла, если он отсутствует. В этом случае touch ничего не делает и не создаёт файл.
Пример:
touch -c omar
Если файла omar нет — команда завершится без изменений.
Опция -r
- -r source копирует метки времени (atime и mtime) из файла source в указанные файлы-цели.
Примеры:
touch -r file1 file2
touch -r file1 file2 file3 file4
file1 — эталон, остальные файлы получат те же метки времени. Если некоторые из целевых файлов не существуют, touch создаст их (если не задан -c).
Опции -d и -t
Обе опции задают произвольную дату и время для меток доступа и модификации одновременно:
- -d принимает «читаемую» строку даты в свободном формате, понятном утилите (например, “2024-12-31 23:59:00”, “next Thursday”, “Sun, 29 Feb 2004 16:21:42”). Эта опция гибкая, но поведение зависит от реализации и локали.
- -t принимает компактную формулу: [[CC]YY]MMDDhhmm[.ss]. Например: 202312312359. Если не указать секунды, они считаются нулём; если не указан CC, поведение зависит от двухзначного года.
Примеры:
touch -t 203404151040 file
Установит 15 апреля 2034 10:40 для atime и mtime.
touch -d “2023-12-31 23:59:00” file
Установит 31 декабря 2023 23:59.
Если год явно не указан, touch возьмёт текущий год среды выполнения.
Установка отдельных меток доступа и изменения
Иногда нужно установить только atime в произвольную дату, а mtime оставить прежним (или наоборот). Команда touch не имеет отдельной опции для установки произвольной метки только одним флагом без комбинирования, но это можно сделать через сочетание -a/-m и -t/-d.
Пример: установить только atime в 5 июня 2016 17:30:
touch -a -t 201606051730 file
Аналогично для mtime:
touch -m -t 201606051730 file
Если вы хотите сохранить одну метку и изменить другую на произвольную дату, рабочий паттерн:
- Скопируйте текущую метку, которую хотите сохранить, во временный файл: > touch -r file file.keep
- Установите нужную произвольную метку целевому файлу с -a или -m и -t/-d.
- Восстановите сохранённую метку обратно в нужный файл с помощью -r и соответствующего выбора -a/-m при необходимости.
Этот метод полезен, когда необходимо точечно изменить только одну из меток без влияния на другую.
Создание пустых файлов
Вторичное и широко используемое назначение touch — быстро создать пустой файл или множество пустых файлов. Это удобно для отметок этапов, логических маркеров или заглушек (placeholder).
Пример создания файла отметки:
touch ~/desktop/project/stage1_completed
После этого файл появится в указанной папке, и его время создания/изменения будет текущим. Посмотреть метки можно через stat.
Практические сценарии использования:
- Создать маркеры завершённых этапов CI/CD.
- Генерировать пустые файлы для тестов на файловую систему.
- Обновлять метки, чтобы влиять на поведение бэкап-утилит, которые ориентируются на mtime.
Практические примеры и шаблоны
- Обновить все файлы в каталоге и подкаталогах до текущего времени:
find . -type f -exec touch {} +
- Создать серию файлов с датами для логов:
for d in 2023-12-01 2023-12-02 2023-12-03; do touch “log-$d”; done
- Синхронизировать метки двух директорий (скопировать метки из file1 во все файлы с тем же именем в другой папке):
find dirA -type f -printf “%P\n” | while read f; do [ -e “dirB/$f” ] && touch -r “dirA/$f” “dirB/$f”; done
- Установить mtime на прошлую дату, но сохранить текущий atime:
touch -r file file.keep touch -m -t 202201011200 file touch -r file.keep file rm file.keep
Альтернативы и совместимость
- GNU touch (часть coreutils) — наиболее распространённая реализация на Linux.
- BSD touch (macOS) имеет схожие опции, но отличия в поддержке форматирования даты возможны; проверяйте man-страницу.
- Для Windows без WSL/Cygwin можно использовать PowerShell: Set-ItemProperty или командлеты для изменения времен файла.
Советы по переносимости:
- Используйте ISO-подобные строки через -d, если реализация поддерживает их.
- Не полагайтесь на поведение двухзначного года; указывайте полный год в -t.
Когда touch не подойдёт (контрпример)
- Если вам нужно изменить другие метки, например, время создания файла (birth/creation time) в некоторых файловых системах — touch не изменит их.
- Если файл доступен только для чтения и у вас нет прав на изменение меток, touch не сможет изменить timestamps без повышения привилегий.
- Для точного управления временем в миллисекундах/наносекундах некоторые реализации не поддерживают мелкие единицы.
Роли: чек-листы
Разработчик
- Обновить маркеры сборки через touch для CI.
- Проверить, что mtime соответствует ожиданиям теста.
Системный администратор
- Использовать touch -r для синхронизации времён между резервными копиями.
- Проверить права доступа перед массовым обновлением меток.
Тестировщик
- Создать тестовые файлы с контролируемыми mtime/atime.
- Добавить проверки stat в тест-сьют.
Шпаргалка (cheat sheet)
- touch file — создать файл, если его нет, и обновить обе метки до текущего времени.
- touch -a file — обновить только atime.
- touch -m file — обновить только mtime.
- touch -c file — не создавать файл.
- touch -r source target — скопировать метки из source.
- touch -t [[CC]YY]MMDDhhmm[.ss] file — установить метку через компактный штамп.
- touch -d “string” file — установить метку по читаемой строке даты.
Тесты и критерии приёмки
Критерии приёмки:
- Команда touch без опций создаёт файл и устанавливает текущие atime и mtime.
- Опция -c не создаёт файл при отсутствии.
- -r корректно копирует и atime, и mtime из эталона во все указанные файлы.
- -a и -m влияют только на соответствующие метки и не меняют другую метку.
Примеры тестов:
- Создать файл, вызвать touch -a и проверить stat: atime изменён, mtime нет.
- Выполнить touch -r и сравнить обе метки с источником.
- Попытаться touch -c на несуществующем файле — убедиться, что файл не создан.
Безопасность и приватность
- Изменение меток времени может повлиять на процессы бэкапа, аудита и анализа логов. Делайте изменения с учётом политики организации.
- В журналах расследования инцидентов изменение timestamps может исказить хронологию — храните записи о таких изменениях.
Короткое руководство для миграции и совместимости
- При переносе скриптов между GNU/Linux и macOS протестируйте опции -t и -d, поскольку синтаксис дат и поддерживаемые форматы могут различаться.
- В скриптах явно указывайте полный четырёхзначный год в -t, чтобы избежать различий с обработкой двухзначного года.
Итог
Команда touch проста, но мощна: она помогает управлять метками времени и быстро создавать маркеры и пустые файлы. Используйте -a и -m для точечного обновления, -r для копирования времён, и -t/-d для установки произвольных дат. Проверяйте локальные реализации и права доступа при массовых изменениях.
Дополнительные ресурсы: откройте man-страницу командой “man touch” в терминале для полной документации вашей реализации.
Итоговая заметка: если у вас есть свой полезный приём с touch — поделитесь в комментариях или добавьте его в свои скрипты для автоматизации.
Похожие материалы
Установка HACS в Home Assistant (Supervised и Docker)
Apple Notes на Windows 10 — как запустить
Решение: nvwgf2umx.dll вызывает падения игр
Как смотреть MSNBC онлайн из любой страны
Исправление ошибки Discord Fatal Javascript