# touch — Dateien anlegen und Zeitstempel setzen

> Praxis-Guide zu touch: leere Dateien anlegen sowie Zugriffs- und Änderungszeit (atime/mtime) setzen – nützlich für Platzhalter und Build-Systeme.

Source: https://www.jpkc.com/db/cheatsheets/files-text/touch/

<!-- PROSE:intro -->
touch hat zwei Aufgaben: Es legt leere Dateien an und es aktualisiert die Zeitstempel vorhandener Dateien – die Zugriffszeit (atime) und die Änderungszeit (mtime). Existiert die Datei noch nicht, wird sie leer erstellt; existiert sie bereits, bleibt ihr Inhalt unangetastet und nur die Zeitstempel wandern auf „jetzt". Das macht touch zum Werkzeug der Wahl für Platzhalter wie `.gitkeep`, für Health-Check-Marker in Containern und um Build-Systeme wie make gezielt zum Neubauen zu bewegen. Dieser Guide zeigt dir das Anlegen von Dateien, das Setzen konkreter Zeitstempel und typische Praxismuster.
<!-- PROSE:intro:end -->

## Dateien anlegen

`touch <file>` — Erstellt eine leere Datei (oder aktualisiert den Zeitstempel, falls sie existiert).

```bash
touch newfile.txt
```

`touch <file1> <file2> <file3>` — Erstellt mehrere Dateien auf einmal.

```bash
touch index.html style.css script.js
```

`touch -c <file>` — Aktualisiert den Zeitstempel nur, wenn die Datei existiert (legt sie nicht an).

```bash
touch -c maybe-exists.txt
```

## Bestimmte Zeitstempel setzen

`touch -t <YYYYMMDDhhmm> <file>` — Setzt ein bestimmtes Datum und eine Uhrzeit.

```bash
touch -t 202601011200 file.txt
```

`touch -t <YYYYMMDDhhmm.ss> <file>` — Setzt Datum, Uhrzeit und Sekunden.

```bash
touch -t 202601011200.30 file.txt
```

`touch -d '<date string>' <file>` — Setzt den Zeitstempel über eine menschenlesbare Datumsangabe.

```bash
touch -d '2026-01-15 14:30:00' file.txt
```

`touch -d 'next Monday' <file>` — Setzt den Zeitstempel über einen relativen Datumsausdruck.

```bash
touch -d 'next Monday' reminder.txt
```

`touch -d '-2 days' <file>` — Setzt den Zeitstempel auf vor 2 Tagen.

```bash
touch -d '-2 days' oldfile.txt
```

## Einzelne Zeitstempel ändern

`touch -a <file>` — Aktualisiert nur die Zugriffszeit (atime).

```bash
touch -a data.log
```

`touch -m <file>` — Aktualisiert nur die Änderungszeit (mtime).

```bash
touch -m config.yaml
```

`touch -r <reference> <file>` — Setzt den Zeitstempel auf den einer anderen Datei.

```bash
touch -r original.txt copy.txt
```

`touch -a -d '<date>' <file>` — Setzt eine bestimmte Zugriffszeit.

```bash
touch -a -d '2026-06-01' data.csv
```

## Häufige Muster

`touch .gitkeep` — Erstellt einen Platzhalter, um ein leeres Verzeichnis in Git zu behalten.

```bash
mkdir -p logs && touch logs/.gitkeep
```

`touch -r <src> <dest>` — Synchronisiert die Zeitstempel zweier Dateien.

```bash
touch -r photo.jpg photo_edited.jpg
```

`find . -name '*.txt' -exec touch {} +` — Aktualisiert die Zeitstempel aller passenden Dateien.

```bash
find . -name '*.cache' -exec touch {} +
```

`touch /tmp/.healthcheck` — Erstellt eine Health-Check-Marker-Datei (verbreitet in Docker).

```bash
touch /tmp/.healthcheck
```

`touch -d '1970-01-01' <file>` — Setzt den Zeitstempel auf den Unix-Epoch (erzwingt einen Neubau in Build-Systemen).

```bash
touch -d '1970-01-01' Makefile
```

<!-- PROSE:outro -->
## Fazit

touch ist unscheinbar, aber im Alltag erstaunlich vielseitig: das schnellste Werkzeug, um leere Dateien anzulegen, und die einfachste Art, Zeitstempel gezielt zu manipulieren. Mit `-t` und `-d` setzt du Datum und Uhrzeit absolut oder relativ, mit `-a`/`-m` änderst du nur Zugriffs- oder Änderungszeit, und mit `-r` übernimmst du die Zeit einer Referenzdatei. Praktisch ist das vor allem bei Build-Systemen wie make, die ihre Entscheidungen anhand der mtime treffen – ein gezieltes touch erzwingt oder verhindert einen Neubau. Beachte, dass touch eine vorhandene Datei niemals leert: Es ändert nur die Metadaten, nie den Inhalt.

## Weiterführende Links

- [ubuntuusers-Wiki: touch](https://wiki.ubuntuusers.de/touch/) – deutschsprachige Erklärung mit Beispielen
- [GNU coreutils: touch invocation](https://www.gnu.org/software/coreutils/manual/html_node/touch-invocation.html) – offizielle Referenz aller Optionen (englisch)
<!-- PROSE:outro:end -->

## Verwandte Kommandos

- [mkdir](https://www.jpkc.com/db/cheatsheets/files-text/mkdir/) – Verzeichnisse anlegen
- [stat](https://www.jpkc.com/db/cheatsheets/files-text/stat/) – Zeitstempel und Metadaten einer Datei anzeigen
- [ls](https://www.jpkc.com/db/cheatsheets/files-text/ls/) – Verzeichnisinhalte und Zeitstempel anzeigen

