Гид по технологиям

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

7 min read Команды Unix Обновлено 10 Dec 2025
Команда touch: метки времени и пустые файлы
Команда touch: метки времени и пустые файлы

Фоновое изображение: иллюстрация работы с файлами и метками времени

Быстрые ссылки

  • Использование команды touch
  • Комбинирование опций для отдельных времён доступа и изменения
  • Создание пустых файлов

Каждый файл в файловой системе хранит метки времени: время последнего доступа (atime) и время последнего изменения содержимого (mtime). Команда touch позволяет просматривать и изменять эти метки, а также создать пустой файл. Ниже — подробное руководство, практические примеры и готовые шаблоны для разных задач.

Использование команды touch

Команда touch доступна в большинстве окружений с оболочкой Bash: Linux, macOS, а также Windows при наличии WSL или Cygwin. Ниже — основные опции и их поведение.

Таблица опций команды touch

Чтобы увидеть текущие метки времени файла, используйте команду 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

Если вы хотите сохранить одну метку и изменить другую на произвольную дату, рабочий паттерн:

  1. Скопируйте текущую метку, которую хотите сохранить, во временный файл: > touch -r file file.keep
  2. Установите нужную произвольную метку целевому файлу с -a или -m и -t/-d.
  3. Восстановите сохранённую метку обратно в нужный файл с помощью -r и соответствующего выбора -a/-m при необходимости.

Этот метод полезен, когда необходимо точечно изменить только одну из меток без влияния на другую.

Создание пустых файлов

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

Пример создания файла отметки:

touch ~/desktop/project/stage1_completed

После этого файл появится в указанной папке, и его время создания/изменения будет текущим. Посмотреть метки можно через stat.

Практические сценарии использования:

  • Создать маркеры завершённых этапов CI/CD.
  • Генерировать пустые файлы для тестов на файловую систему.
  • Обновлять метки, чтобы влиять на поведение бэкап-утилит, которые ориентируются на mtime.

Практические примеры и шаблоны

  1. Обновить все файлы в каталоге и подкаталогах до текущего времени:

find . -type f -exec touch {} +

  1. Создать серию файлов с датами для логов:

for d in 2023-12-01 2023-12-02 2023-12-03; do touch “log-$d”; done

  1. Синхронизировать метки двух директорий (скопировать метки из file1 во все файлы с тем же именем в другой папке):

find dirA -type f -printf “%P\n” | while read f; do [ -e “dirB/$f” ] && touch -r “dirA/$f” “dirB/$f”; done

  1. Установить 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 — поделитесь в комментариях или добавьте его в свои скрипты для автоматизации.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Установка HACS в Home Assistant (Supervised и Docker)
Home Assistant

Установка HACS в Home Assistant (Supervised и Docker)

Apple Notes на Windows 10 — как запустить
Инструкции

Apple Notes на Windows 10 — как запустить

Решение: nvwgf2umx.dll вызывает падения игр
Техподдержка

Решение: nvwgf2umx.dll вызывает падения игр

Как смотреть MSNBC онлайн из любой страны
Стриминг

Как смотреть MSNBC онлайн из любой страны

Исправление ошибки Discord Fatal Javascript
Техподдержка

Исправление ошибки Discord Fatal Javascript

Microsoft PC Manager — обзор и руководство
Windows

Microsoft PC Manager — обзор и руководство