Ich habe mich gefragt, ob jemand weiß, wie man die Zeitstempel von Ordnern rekursiv ändert, basierend auf dem letzten gefundenen Zeitstempel der Dateien in diesem Ordner.
Also zum Beispiel:
jon @ UbuntuPanther: / media / media / MP3s / Foo Fighters / (1997-05-20) Die Farbe und die Form $ ls -alF insgesamt 55220 drwxr-xr-x 2 jon jon 4096 30.08.2010 12:34 ./ drwxr-xr-x 11 jon jon 4096 30.08.2010 12:34 ../ -rw-r - r-- 1 jon jon 1694044 18.04.2010 00:51 Foo Fighters - Doll.mp3 -rw-r - r-- 1 jon jon 3151170 18.04.2010 00:51 Foo Fighters - Genug Platz.mp3 -rw-r - r-- 1 jon jon 5004289 18.04.2010 00:52 Foo Fighters - Everlong.mp3 -rw-r - r-- 1 jon jon 5803125 18.04.2010 00:51 Foo Fighters - February Stars.mp3 -rw-r - r-- 1 jon jon 4994903 18.04.2010 00:51 Foo Fighters - Hey, Johnny Park! .mp3 -rw-r - r-- 1 jon jon 4649556 18.04.2010 00:52 Foo Fighters - Monkey Wrench.mp3 -rw-r - r-- 1 jon jon 5216923 18.04.2010 00:51 Foo Fighters - My Hero.mp3 -rw-r - r-- 1 jon jon 4294291 18.04.2010 00:52 Foo Fighters - My Poor Brain.mp3 -rw-r - r-- 1 jon jon 6778011 18.04.2010 00:52 Foo Fighters - New Way Home.mp3 -rw-r - r-- 1 jon jon 2956287 18.04.2010 00:51 Foo Fighters - See You.mp3 -rw-r - r-- 1 jon jon 2730072 2010-04-18 00:51 Foo Fighters - Up in Arms.mp3 -rw-r - r-- 1 jon jon 6086821 2010-04-18 00:51 Foo Fighters - Walking After You.mp3 -rw-r - r-- 1 jon jon 3033660 18.04.2010 00:52 Foo Fighters - Wind Up.mp3
Für den Ordner "(1997-05-20) Die Farbe und die Form" wurde der Zeitstempel auf 2010-04-18 00:52 festgelegt.
quelle
/media/media/MP3s
? Dann in zsh:for d in /media/media/MP3s/**/*(/); do touch -r $d/*(Dom[1]) $d; done
. Ohne zsh (aber wirklich, mit zsh ist es einfacher): Setze den Befehl in ein Skript und starte esfind /media/media/MP3s -type d -execdir /path/to/the/script \;
.for d in ...
wie können Sie das Folgende anpassen, damit es auch mit Ordnern funktioniert, die Leerzeichen enthalten? (Das fehlt noch in meiner Lösung)Das ist nicht "rekursiv", sondern ändert nur alle Zeitstempel in einem Ordner. Wenn Sie das meinen, sind es zwei Schritte.
stat -c '%Y' filename
gibt den Zeitstempel vonfilename
undstat -c '%Y %n' *
den Zeitstempel und den Dateinamen jeder Datei im Ordner aus, sodass der Dateiname der zuletzt geänderten Datei im aktuellen Ordner ermittelt wird:Am zweiten Gedanken, gibt es eine Art und Weise einfachen Weg , um den höchsten Zeitstempel in dem Ordner zu erhalten:
Anschließend möchten Sie alle Dateien im Ordner so ändern, dass sie denselben Zeitstempel wie diese Datei haben.
touch -r foo bar
ändert sichbar
mit demselben geänderten Zeitstempel wiefoo
, sodass alle Dateien im Ordner denselben geänderten Zeitstempel haben wie Ihre zuletzt geänderte Datei:Der Einzeiler ist also:
quelle
ls
Dateinamen zu ändern, die Nicht-ASCII-Zeichen enthalten. Wenn du Einzeiler willst, benutze zsh :-)Ich habe die Arbeit zusammengestellt und jetzt:
Dies wäre ein Skript, das alle Verzeichnisse
/tmp/test/
in den Zeitstempel der neuesten Datei in jedem Verzeichnis ändert :Sie können einige Testdateien in / tmp wie folgt hinzufügen:
quelle
"
wieder entfernt, sieht es zunächst so aus, als ob es fehlt, aber es funktioniert.benutz einfach
quelle
Ich verwende dieses Skript, um Ordner-Zeitstempel rekursiv auf den neuesten Inhalt zu setzen. (Es ist Gilles 'Antwort sehr ähnlich):
quelle
Ich habe den Befehl @Gilles zsh übernommen und für die Arbeit in Unterordnern verbessert, aber es scheint, dass zsh für den Teil ** / * (FDod) furchtbar ineffizient ist.
Die Anführungszeichen ermöglichen, dass Verzeichniseinträge mit Leerzeichen und Tabulatoren ordnungsgemäß funktionieren. Mit dem FD werden nicht leere Verzeichnisse gefunden, einschließlich der Verzeichnisse, die mit. Beginnen. Mit dem od wird zuerst in der Tiefe gesucht Art und Weise, so dass die übergeordneten Ordner Zeitstempel korrekt aktualisiert.
Beim Testen stellte ich fest, dass die Leistung und der Speicherbedarf für ** / * (FDod) verrückt waren (über 1,4 GB für nur 650.000 Ordner), und es wurde die gesamte Menge gelesen, bevor mit dem Berühren von Ordnern begonnen wurde. Nachdem es durch find / read ersetzt wurde, wurde es viel schneller, brannte keinen Speicher und begann fast sofort.
Wenn Sie es nicht in einem Skript ausführen, ersetzen Sie "$ @" durch die Ordner, aus denen Sie es ausführen möchten.
quelle
Ich mochte die Dunkelheit der Shell-Befehle nicht wirklich und tat es schnell in Python.
Es setzt rekursiv alle Verzeichnis-mtimes auf die neueste nicht ausgeschlossene Datei / dir mtime innerhalb.
quelle