Ich habe ein Verzeichnis von Dateien, die ich in eine gegebene Zeichenfolge mit einem Zeitstempel umbenennen muss.For-Schleife löscht Dateien Statt Umbenennen
Ich verwende den folgenden Code ein:
for file in itvl_*
do
mv "$file" "Interval_$(stat -c %Y "$file" | date +%Y%m%d%H%M%S).Interval_001"
done
Als ich das Skript in einem Verzeichnis von Dateien ausführen, die die gegebene Maske itvl_ * passen, entfernt es alle bis auf eine oder zwei der Dateien und dann umbenennt erfolgreich die letzte Datei in der Gruppe.
Was könnte hier passieren?
Ihre "Sekunden" reichen nicht aus, um Dateien zu unterscheiden - bash benennt wahrscheinlich die meisten Dateien in derselben Sekunde um und erstellt viele Dateien mit demselben Dateinamen. – Raizuri
'Datum' liest nicht von der Standardeingabe; Sie verwenden nur das aktuelle Datum/die aktuelle Uhrzeit für den neuen Dateinamen. Sie wollen '$ (Datum +% Y% m% d% H% M% S --Datum $ (stat -c% Y" $ Datei "))' 'das Ergebnis von' stat' als Argument für das Datum verwenden '. – chepner