Linux Touch Directory-Befehl

9

Was bewirkt der Befehl 'touch', wenn er auf ein Verzeichnis angewendet wird?

$ mkdir test
$ ls -l test
drwxrwxr-x 2 dragos dragos 4096 Oct 27 18:08 test
$ touch test
$ ls -l
drwxrwxr-x 2 dragos dragos 4096 Oct 27 18:08 test
Dragos Rizescu
quelle

Antworten:

8

Wie in der Manpage angegeben , wird hauptsächlich Folgendes verwendet touch:

Aktualisieren Sie die Zugriffs- und Änderungszeiten jeder DATEI auf die aktuelle Zeit.

So werden die Zugriffs- und Änderungszeiten des Verzeichnisses aktualisiert.

Jorge Suárez de Lis
quelle
4

Das Beispiel oben macht nicht deutlich, dass "touch" die Zeit des Verzeichnisses festlegt (die neue Zeit in der Liste war dieselbe wie das Original, einfach weil die Berührung so bald nach dem Erstellen des Verzeichnisses erfolgte). Ja, die Definition von "DATEI" in der Dokumentation enthält Verzeichnisse, sodass Sie ihre Zeitstempel mit touch ändern können, ABER ...

In einigen Situationen können Sie den Zeitstempel eines Verzeichnisses nicht ändern (für einige Arten von remote gemounteten Verzeichnissen), selbst wenn Sie die Berechtigung haben, etwas anderes zu tun. zB diese NFS-Halterung:

$ touch -d "2014-07-02 12:15" /public/test.dir    
touch: setting times of ‘/public/test.dir’: Operation not permitted

Außerdem können Probleme auftreten, wenn einige alte Daten auf einigen Servern nicht unterstützt werden, z.

$ mkdir  /Acer/kopies/test.dir
$ ls -ald /Acer/kopies/test.dir
drwxr-xr-x 2 mark aitchison 0 Mar 11 17:40 /Acer/kopies/test.dir

Das funktioniert:

$ touch "2014-04-01 00:00" /Acer/kopies/test.dir
$ ls -ald /Acer/kopies/test.dir
drwxr-xr-x 2 mark aitchison 0 Apr  1  2014 /Acer/kopies/test.dir

Dies würde in einem lokalen Verzeichnis funktionieren, gibt jedoch ein seltsames Datum unter Samba-Reittieren an:

$ touch -d "1955-07-02 12:15" /Acer/kopies/test.dir
$ ls -ald /Acer/kopies/test.dir
drwxr-xr-x 2 mark aitchison 0 Nov 26  60410 /Acer/kopies/test.dir
                              ~~~~~~~~~~~~~
user235510
quelle
2

touchist ein Standard-Unix-Programm zum Ändern der Zugriffs- und Änderungszeitstempel einer Datei. Es wird auch verwendet, um eine neue leere Datei zu erstellen.

Die Single Unix Specification (SUS) gibt an, dass durch Berühren die Zugriffszeiten, Änderungszeiten oder beides für eine Datei geändert werden sollen. Die Datei wird durch einen Pfadnamen identifiziert, der als einzelnes Argument angegeben wird. Außerdem wird angegeben, dass die Datei erstellt und die Zugriffs- und Änderungszeiten wie angegeben festgelegt werden, wenn die identifizierte Datei nicht vorhanden ist. Wenn keine neuen Zeitstempel angegeben sind, verwendet touch die aktuelle Zeit.

-Wikipedia

Sie können detailliertere Informationen zum touchBefehl (oder zu jedem anderen Befehl, über den Sie wissen möchten) finden, indem Sie den folgenden manBefehl verwenden:

man touch

Atari911
quelle
2

Der unmittelbare Grund für die Frage ist die Tatsache, dass die Standardzeitauflösung von ls -lin Minuten angegeben ist, sodass ein Dateisystemeintrag, der innerhalb derselben Minute berührt wird, in der Standardausgabe genauso angezeigt ls -lwird.

Die Lösung hierfür wird unter /superuser/355318/how-to-have-linux-ls-command-show-second-in-time-stamp beschrieben und umfasst im Wesentlichen das Ausführen ls -l --time-style=full-iso.

Josip Rodin
quelle