Zufällige Gruppe von Änderungsdaten

Ich habe mehrere Dateien mit demselben Änderungsdatum in einem Ordner, und ich möchte das Datum für alle Dateien in diesem Ordner und das gleiche für andere Ordner im Verzeichnis ändern, sodass der Inhalt des Änderungsdatums jedes Ordners unterschiedlich ist in einen beliebigen Ordner.

Wenn das nicht sinnvoll war, hier ist ein Screenshot eines Beispielverzeichnisses. Das Ziel besteht darin, das Änderungsdatum auf ein anderes Datum für den Inhalt des Ordners zu ändern und dasselbe mit dem Inhalt des anderen Ordners mit einem anderen Datum zu tun.

Beispielverzeichnis

Ich weiß, dass es möglich ist, mehrere Dateien auf einmal zu berühren, indem man verwendet touch -t YYYYMMDDhhmm file1 file2 file3, aber gibt es eine Möglichkeit, diesen Vorgang mit einem zufälligen Datum zu automatisieren?

Eine kostenpflichtige App, A Better Finder Attributes , kann Dateidaten ändern: A Better Finder Attributes 6 gibt Ihnen die vollständige Kontrolle über Dateierstellungs- und Änderungsdaten, indem Sie sie auf bestimmte Zeiten und Daten einstellen, Zeiten hinzufügen oder entfernen oder sie einfach ganz entfernen. Haftungsausschluss: Ich bin ein zufriedener Benutzer von ABFA. Keine finanziellen oder sonstigen Verbindungen zu Publicspace.net.
@IconDaemon Vielen Dank für die Empfehlung von ABFA, aber der Grund, warum ich den Prozess automatisieren muss, ist, dass ich viele Ordner in anderen Ordnern verschachtelt habe, ähnlich wie in diesem Verzeichnisbaumbeispiel in der Frage. Das, und da ich ein Datum manuell auswählen muss, kann ich auch Touch anstelle von ABFA verwenden.

Antworten (1)

Dies ist eine ungewöhnliche Anfrage. Ich bin mir nicht sicher, warum Sie das tun möchten, aber es hat mein Interesse geweckt. Wir verwenden jot, um uns eine Zufallszahl zwischen 1 und 16000 auszuwählen.

jot -r 1 1 16000

Dies ist die Anzahl der Stunden, die wir vom aktuellen Datum abziehen.

seed=$(jot -r 1 1 16000)
date -v-"$seed"H "+%Y%m%d%H%M.%S"

Beachten Sie, dass dateoben das Datum so formatiert wird, dass es mit Touch funktioniert.

Jetzt listen wir findalle Verzeichnisse im aktuellen Arbeitsverzeichnis auf und verwenden ein "Inline" -Skript, um alle Dateisystemobjekte in jedem Verzeichnis mit einer eindeutigen Änderungszeit in jedem Verzeichnis zu berühren.

find . ! -name '.' -type d -exec bash -c ' for dir
    do
        seed=$(jot -r 1 1 16000)
        echo touch -t "$(date -v-"$seed"H "+%Y%m%d%H%M.%S")" "${dir}/"*
    done
' sh {} \;

Wir sind noch nicht fertig, weil wir die Änderungszeiten von verschachtelten Verzeichnissen wahllos geändert haben. Wir wollen eindeutige Mod-Zeiten für jedes Verzeichnis.

find . ! -name '.' -type d -exec bash -c ' for dir
    do
        seed=$(jot -r 1 1 16000)
        echo touch -t "$(date -v-"$seed"H "+%Y%m%d%H%M.%S")" "${dir}"
    done
' sh {} \;

Und um alles zusammenzufassen-

#! /bin/ksh

find . ! -name '.' -type d -exec bash -c ' for dir
    do
        seed=$(jot -r 1 1 16000)
        echo touch -t "$(date -v-"$seed"H "+%Y%m%d%H%M.%S")" "${dir}/"*
    done
' sh {} \;


find . ! -name '.' -type d -exec bash -c ' for dir
    do
        seed=$(jot -r 1 1 16000)
        echo touch -t "$(date -v-"$seed"H "+%Y%m%d%H%M.%S")" "${dir}"
    done
' sh {} \; 

Dieses Skript könnte fehlschlagen, wenn Sie ARG_MAX überschreiten, und listet derzeit nur die Änderungen auf, die durch Berührung vorgenommen würden. Sie können das echodavor entfernen, touchum die Änderungen vorzunehmen. Bitte beachten Sie, dass dieses Skript nur begrenzt getestet wurde und OHNE MÄNGELGEWÄHR angeboten wird.

Ya verdammte Legende!! Ich wollte nur für jede Datei für jeden Ordner in einem Verzeichnis, aber ich denke, ich habe auch die Möglichkeit, die Ordner zu berühren! Zum Grund: Sagen wir einfach, ich gehe diese Dateien durch und kann mit der Zeit irgendwie vorhersagen, was als nächstes kommt. Nur ein Fehler, der leicht behoben werden konnte, die vom Datumsgenerator erzeugten Zahlen enthielten die Dezimalstellen für die toucherforderlichen Sekunden nicht, aber es war einfach, den zu entfernen, %Sum ihn zu beheben.
@MrU Danke für den Hinweis auf den Fehler. kshIrgendwie ist der Punkt bei der Umwandlung der Datumsfunktion in die Verwendung des externen dateBefehls für verloren gegangen bash.