Wozu dient der touch
Befehl? Ich weiß, dass ich damit leere Dateien erstellen kann, aber so ist es auch mit echo -n
.
Warum müsste sonst jemand die Zeitstempel einer Datei ändern? Sofern nicht der falsche Eindruck über das Alter einer Datei entsteht, sehe ich keine andere Verwendung, und diese ist (aus meiner Sicht) keine legitime.
command
timestamps
touch
Quora Feans
quelle
quelle
echo -n > filename
können Sie Folgendes>filename
Unless to create the false impression about the age of a file
. Kein notwendiger falscher Eindruck. Was ist, wenn Sie die Änderungszeit ändern möchten ? Es kann in Skripten nützlich sein. Dieses Skript hängt stark vomtouch
Befehl ab und es ist sehr bequem und einfach, es so zu haben.tar
(oder andere Dearchivierer) tun, wenn sie ein Archiv extrahieren. Im Allgemeinen wird die Änderungszeit der Datei auf die Zeit aus dem Archiv festgelegt, nicht auf die Zeit, zu der das Archiv extrahiert wurde. Dies ist eine wünschenswerte Funktion. Da es für ein Programm im Benutzermodus legitim ist, falsche Zeitstempel zu erstellen, gibt es nicht viele Argumente, warumtouch
(oder ein anderes Befehlszeilenprogramm) es nicht zulassen sollte, wenn es auf einem Befehlszeilenargument basiert. Wenn du C lernst, bist du nicht legitimer als jemand, der einsh
Drehbuch schreibt ;-)age
einer Datei beschreibt. Das wäre eincreation
Zeitstempel und es gibt keinen solchen Zeitstempel für Dateien in Unix.Antworten:
Ein Vorteil von
touch
ist, dass beliebige Zeitstempel angegeben werden können, wobeiecho -n
immer die aktuelle Zeit angezeigt wird.Ein Beispiel für eine legitime Verwendung ist das Aktualisieren eines Zeitstempels einer Quellcodedatei, sodass ein Programm wie dieses
make
die Quelldatei als neuer als ihr kompiliertes Objekt betrachtet und neu erstellt.Andere Verwendungszwecke sind das Erstellen von Dateien, die ausschließlich auf der Grundlage ihrer Existenz funktionieren, z
/etc/nologin
. Ich würde auch behaupten, dass diestouch myfile
ein einfacheres Konstrukt ist alsecho -n >> myfile
, und dass es auch kürzer zu tippen ist.quelle
echo -n
dass dort steht "Keine nachgestellte Newline ausgeben". Also ich sehe nicht, wie das eine leere Datei erstellen kann. Können Sie bitte klären?echo -n
gibt eine leere Zeichenfolge aus und tut selbst nichts. Wenn Sie die Ausgabe über>>
umleiten, wird die leere Ausgabe an eine Datei angehängt. Durch die Umleitung wird die Datei erstellt, wenn sie nicht vorhanden ist.echo -n
Fall ist, müssen und sollten Sie keinen Befehl verwenden, der nichts bewirkt.echo -n
kann die Zeichenfolge "-n" unter einigen Shells ausgeben. Wenn Sie wirklich einen Befehl benötigen, der nichts tut,:
odertrue
eine bessere Option sind, aber>> myfile
für sich genommen auch eine absolut gültige Methode zum Erstellen der Datei ist, wenn sie nicht vorhanden ist. All dies unterstützt natürlich Ihre Antwort, dass Sie nur "touch" verwenden sollten.Der zugrunde liegende Systemaufruf (
utime
) ist wichtig, damit verschiedene Dienstprogrammetar
die Zeitstempel einer neu kopierten (nicht geteerten) Datei setzen können. Bei einigen Sicherungsprogrammen kann auch die Option zum Zurücksetzen des letzten Zugriffs auf kopierte Dateien gewählt werden.Eine legitime Verwendung von
touch
ist das Erstellen einer Datei mit einem bestimmten Zeitstempel. Eine solche "Referenz" -Datei kann dann von Befehlen wie verwendet werdenfind
. Zum Beispiel, um alle Dateien zu finden, die vor kurzem geändert wurden als am 1. November 2013 (dh am 01.11.2013). "quelle
201311010000
bedeutet Nov1,2013? Gibt es ein Dienstprogramm, das mir das sagt? Mit anderen Worten, wie bestimme ich die zu berührende Eingabe?20131101
in den2013-11-01
oder den 1. November 2013 unterteilt werden kann, können Sie davon ausgehen, dass der0000
Teil eine bestimmte Tageszeit angibt, in diesem Fall 00 Stunden, 00 Minuten. Oder schauen Sie einfach in der Manpage nachtouch
, die Ihnen genau sagt, wie das Format lautet (siehe-t
).Der
touch
Hauptzweck des Befehls besteht darin, die Zeitstempel von Dateien zu bearbeiten und Dateien zu erstellen.Beispiele
1. Dateien erstellen
HINWEIS: Die
total 0
Ausgabe vonls -l
ist korrekt. Diese Implementierung vonls
zeigt die Anzahl der Blöcke an, die von den Dateien verwendet werden, wenn sie aufgelistet sind. Sie können sich davon überzeugen, indem Sie den-s
Schalter zu hinzufügenls
. Dies listet die von jeder Datei verwendeten Blöcke auf. Hier habe ich 2 Zeichen zu Datei1 & Datei2 hinzugefügt.Beispiel
2. Zeit- / Datumsinfo eines Datei-Stat-Befehls
Wir können
touch
die verschiedenen Zeitstempel für eine bestimmte Datei bearbeiten.3. Auszug aus der Touch-Manpage
4. Zugriffszeit manipulieren
5. Ändern Sie die Uhrzeit
Sie wundern sich vielleicht über die Änderungszeit (ctime). Das kann nicht mit manipuliert werden
touch
. Hier wird der Zeitpunkt aufgezeichnet, zu dem Metadaten in der Datei berührt wurden. In dieser U & L-Frage und Antwort finden Sie weitere Informationen mit dem Titel: Was können Sie mit einer Datei tun, ohne den Zeitstempel "Ändern" auszulösen? .quelle
ls -l
in einem Verzeichnis, in dem die Dateien die Größe 0 haben und noch nichts anderes vorhanden ist. Sobald Sie eine der Dateigrößen angeben, wird die Gesamtsumme mit der Anzahl der von den Dateien verwendeten Blöcke angezeigt. Sehen Sie sich meine Updates an, wenn Sie sich nicht sicher sind. Ich habe ein Beispiel hinzugefügt.Abgesehen von den beiden anderen sehr guten Antworten, die Sie erhalten haben, ist eine weitere Verwendung, in Ihren Worten, zu
Zum Beispiel zur Verwendung in Backup-Schemata . Möglicherweise möchten Sie ein Backup nicht mit einem neueren aktualisieren, da diese identisch sind oder da die Änderungen im Vergleich zu den Kosten für die Aktualisierung eines Backups, beispielsweise auf einer langsamen Leitung zu einem Remote-Host, irrelevant sind. Um dies zu erreichen, haben Sie die einfache Möglichkeit, die Sicherungsdatei mit einem neueren Zeitstempel zu kennzeichnen, nicht zu fälschen, sondern zu erklären, dass der Gültigkeitszeitstempel dieser Datei jetzt ein anderer ist.
Der Eindruck über das Alter der Akte ist jetzt zwar falsch, aber seine Bedeutung ist real und legitim.
quelle
Eine der häufigsten Verwendungen von
touch
ist - oder war es zumindest -, um eine Neuerstellung des Codes auszulösen.Die üblichen Build-Tools -
make
und ihre Ableitungen - versuchen, Arbeit zu sparen, indem sie Dateien nicht neu kompilieren / neu erstellen, es sei denn, eine der Dateien, mit denen sie erstellt wurden, hat sich geändert - zum Beispiel, wenn eine .o-Datei aktueller als die .c-Datei ist In der Regel kann davon ausgegangen werden, dass die C-Quelle seit der Kompilierung zur Erstellung dieser Objektdatei nicht geändert wurde.Aber es gibt Zeiten, in denen Sie einen Wiederaufbau erzwingen möchten. Sie könnten eine unnötige Änderung an einer der Quelldateien vornehmen, dies könnte jedoch versehentlich zu Beschädigungen führen. Stattdessen könnten Sie
touch
die Datei einfach so gestalten , dass sie neu aussieht, ohne dass das Risiko besteht, dass der Inhalt geändert wird - und das würde ausreichen, um zu überzeugen,make
dass es an der Zeit ist, alles neu zu erstellen, was von dieser Datei abhängt.Es gibt andere Verwendungen, aber historisch gesehen war das die große.
quelle
touch
also so schlimm wie ein manueller Wechsel. Um einen Neuaufbau zu veranlassen, schlage ich vor, die Ausgabedateien.o
der fraglichen Quelle zu löschen .Ich habe mit mindestens einem Webframework gearbeitet (kann mich nicht erinnern, welches), das im Entwicklungsmodus die Quellcodedateien auf Änderungen überprüft und die Anwendung dann neu geladen hat.
Natürlich wollte man manchmal, dass es neu geladen wird, nachdem etwas geändert wurde, das es nicht sah. In diesem Fall hat
touch
die Hauptkonfigurationsdatei den Trick getan.Im Allgemeinen also immer dann, wenn Sie einen Prozess starten möchten, der durch Änderungen an einer Datei ausgelöst wird, ohne die Datei tatsächlich zu ändern.
quelle
Rechtmäßiger Gebrauch der Berührung:
quelle
Eine Verwendung besteht darin, den Zeitstempel einer Datei zu korrigieren, die nicht richtig eingestellt wurde.
Beispielsweise führt die meiste Zeit, in der Sie eine Datei kopieren (und in manchen Fällen, in denen Sie eine Datei verschieben), dazu, dass die neue Datei einen Zeitstempel der aktuellen Zeit anstelle des Zeitstempels der Originaldatei aufweist.
In der Regel ist dies nicht erwünscht. Touch kann das "reparieren".
Eine andere Verwendung besteht darin, eine Dateiänderung wiederzugeben, die rückgängig gemacht wurde, indem der Zeitstempel der Datei auf den Stand vor den Vorgängen "Bearbeiten ... Rückgängigmachen" zurückgesetzt wurde.
quelle
alias cp='cp --preserve=timestamps'
ist für mich im PC-Land besser geeignet…Ein wichtiger Unterschied zu "
things
like"echo
(oder noch besser,> file
wie von anderen erwähnt) ist, dass durch Berührung der Inhalt nicht zerstört wird.> file
leert eine Datei.touch
wird nicht. Anstatt über Tricks nachzudenken, um Schäden an Inhalten zu vermeiden, verwenden Sie einfach Touch! Es wird sowieso weniger Arbeit im Kernel erledigen, da es nur mit den Attributen der Datei funktioniert, ohne Zeit zu verschwenden, um sich tatsächlich auf ein Öffnen vorzubereiten und dann ein Schließen durchzuführen.Durch Berühren kann der Zeitstempel möglicherweise geändert werden, auch wenn sich die Datei derzeit unter einer obligatorischen oder beratenden Sperre befindet oder exklusiv geöffnet ist. Hmmm, habe das noch nie getestet oder darüber nachgelesen ...
quelle
>>
wird angehängt anstatt zu überschreibenHier ist eine - ich benutze ein Softwareprogramm namens SageTV, um Fernsehsendungen aufzunehmen - diese werden oft in MPEG-2 aufgezeichnet, was kein sehr effizienter Codec ist, und es ist auch nicht iPad / iPhone-freundlich. Also konvertiere ich die Dateien in MP4-Dateien. Bei der Wiedergabe der Dateien erwartet SageTV jedoch, dass der Zeitstempel der Datei zum Zeitpunkt des Beginns der TV-Sendung liegt. Andernfalls wird die Zeitachse der Sendung verzerrt, sodass es nicht einfach ist, FF oder REW auszuführen. Aus diesem Grund setze ich mit touch den Zeitstempel der .mp4-Datei so zurück, dass er mit der Originaldatei übereinstimmt.
Ist das echt?
quelle
Oft haben Sie einen Prozess, der sich von der Benutzer-ID ändert, z. B. von root -> etwas anderes. Mit Touch können Sie eine Datei an einem Ort erstellen, den nur Root berühren kann, bevor sich die Anwendung als der andere Benutzer bei ihm anmeldet.
quelle
Bei der Arbeit haben wir ein Archiv von digitalen Karten, die mehr als 15 Jahre zurückreichen. Diese alten Karten werden in einer Vielzahl von Formaten wie PostScript, EMF, PRN, HPGL2, PDF usw. gespeichert, die die meisten Programme nicht verstehen. Oder Sie benötigen ein Dutzend verschiedene Programme, um sie alle zu sehen.
Um die Suche und das Durchsuchen all dieser verschiedenen Formate zu vereinfachen, erstellen wir JPEG-Versionen der Karten und verwenden dann touch, um die JPEG-Datei mit dem Zeitstempel der Originalquelldatei abzustimmen - oft Jahre nachdem das Original erstellt wurde.
Jetzt können wir mit einem einzigen Programm wie Picasa die gesamte Bibliothek anzeigen und bestimmte Datumsbereiche trivial lokalisieren. Ohne Berührung müssten wir für jedes einzelne Bild Datumsmetadaten hinzufügen, wahrscheinlich manuell, und dann nach diesen Zeichenfolgen suchen, wenn wir nach einem bestimmten Datumsbereich suchen.
quelle
Ich habe es noch nicht für diesen Zweck verwendet, aber ich habe ein Skript, das die Dateien und ihre Daten aus einem Verzeichnis liest und sie für die Verwendung auf einer Webseite liest. Wenn ich eine bearbeiten muss, wird das Datum geändert. Ich habe darüber nachgedacht
touch
, ihre Bestellung zurückzusetzen.quelle
Einige Init-Skripte vergleichen den Zeitstempel einer Konfigurationsdatei mit ihrer eigenen PID-Datei. Das Ergebnis entscheidet, ob der ausgeführte Dienst neu geladen wird oder nicht.
Wenn es eine Situation gibt, in der Sie die Konfiguration nicht ändern, aber das Neuladen erzwingen möchten, hilft Ihnen touch hier.
quelle
Ich habe einen Cron-Job, der die Änderungen aus einer Datenbank abruft, die zwischen der letzten Ausführung des Jobs und der aktuellen Ausführung aufgetreten sind. Es wird eine XML-Datei der Änderungen erstellt, die dann in einer anderen Datenbank verarbeitet werden. Die letzte Laufzeit wird anhand des Zeitstempels in der XML-Ausgabedatei ermittelt. *
Wenn bei der Verarbeitung der XML-Datei etwas schief geht, möchte ich möglicherweise den Lauf ab dem ursprünglichen Datum wiederholen, nicht ab dem Datum, auf das sich der Zeitstempel der neuen XML-Datei bezieht.
Der einfachste Weg, dies zu tun, anstatt die aufgerufenen Skripte zu bearbeiten, besteht darin, die XML-Datei zu berühren und den Zeitstempel auf das von mir gewünschte Datum zu setzen.
Auch wenn ich neu beginne (ohne vorherige XML-Ausgabedatei), kann ich einfach deren Existenz mit touch simulieren.
[*] Bevor jemand darauf hinweist - Mir ist klar, dass der Zeitpunkt, an dem der Auftrag gestartet wird und das Schreiben der XML-Datei eine Zeitlücke von einigen Minuten lässt, in der DB-Änderungen auftreten können. Der Job wird zu einem Zeitpunkt ausgeführt, an dem Änderungen an der Datenbank äußerst unwahrscheinlich sind. Das ist meine Entschuldigung und ich bleibe dabei :-)
quelle