Änderungsdatum in Dateinamen einfügen - 2 Fälle

Änderungsdatum in Dateinamen einfügen - 2 Fälle

Ich glaube, ich werde zwei verschiedene Fragen stellen, aber der Kontext ist derselbe, also hoffe ich, dass es in Ordnung ist.

Ich habe eine Ausgabe einiger Prozesse, wie unten dargestellt (die ich nicht ändern kann).

25978.csv
26044.csv
26865.csv
26914.csv
27013.csv

Was ich mit dieser Eingabe erreichen möchte, ist die „einfache Operation“, das Datum in den Dateinamen einzufügen oder diesen Dateinamen zu ersetzen. Das gewünschte Datum entspricht normalerweise dem Datum der letzten Änderung, sodass es mit einem for f in *.csv; do mv -- "$f" "$f-$(date +%Y%m%d -r "${f}")"; doneEinzeiler machbar ist und umbenannt werden kann. Manchmal liegt das Datum der letzten Änderung einen Tag von dem Datum entfernt, nach dem ich suche, daher frage ich mich, ob es eine einfache Möglichkeit (Einzeiler?) gibt, diesen numerischen Wert zu verringern (z. B. um 20160506 in 20160505 umzuwandeln)?

20150506.csv
20150507.csv
20150508.csv
20150509.csv
20150510.csv

Der zweite Fall. Das Datum der letzten Änderung ist nicht sinnvoll, da es völlig falsch ist. Aber die Zahl im Dateinamen erhöht sich mit dem erwarteten Datum. Kann ich einen numerischen Wert in den Dateinamen einfügen und denselben Wert für jede nachfolgende Datei um eins erhöhen? Verstehen Sie, was ich erreichen möchte? Ich weiß nur nicht wie ;)...

BEARBEITEN Ich habe eine Antwort auf meine Frage gefundenHier- irgendwie ... Vielleicht kann ich es einfach nicht verwenden?

cnt=0
for i in *; do
  let cnt=cnt+1
  mv "$i" "$(echo "${i}_${cnt}" | awk -F_ '{print $1"_"$3}')"
done

Ich weiß, wie ich es für meine Zwecke ändern kann, aber am Ende ist die Ausgabe für alle Dateien gleich, z. B. „Inkrementierung funktioniert nicht“. Ich habe den obigen Code unter gespeichert rename.shund daran gedacht, seine Ausführung durch zuzulassen chmod 755 rename.sh, aber mir ist trotzdem nichts eingefallen …

Antwort1

Ich hoffe, es ist kein Verbrechen, meine eigene Frage zu beantworten. Ich habe eine Teillösung gefunden beiFragenUbuntu- funktioniert bei mir, zumindest im ersten Fall.

touch -d "$(date -R -r filename) - 2 hours" filename

Und um alle Dateien im Unterordner zu ändern, geben Sie Folgendes ein:

find DIRECTORY -print | while read filename; do
    # do whatever you want with the file
    touch -d "$(date -R -r "$filename") - 2 hours" "$filename"
done

verwandte Informationen