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

Команда 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
Автор
Редакция

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

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство