J'ai les noms des fichiers dat dans l'ordre chronologique:
FileName_YYYY_MM_DD_HHMM.dat
Existe-t-il des commandes pour ajouter 30 minutes à chaque horodatage?
command-line
filename
timestamp
fraise
la source
la source
ls --full-time
?Réponses:
En utilisant
python
:os.chdir('/path/to/dir')
changera le répertoire courant en répertoire contenant les.dat
fichiers. Remplacez/path/to/dir
par le chemin réel.glob.glob('*.dat')
trouvera les fichiers se terminant par.dat
ini_time
La variable supprimera d'abord la date-heure du nom de fichier d'origine à l'aide dure
module, puis triera quelle entrée représente quoi dans la chaîne qui est supprimée afin que nous puissions ajouter le temps requis à cettefin_time
contiendra le temps résultant, c'est-à-direini_time
plus 30 minutesos.rename
renommera le fichier en conséquence.Notez également que, avec des noms de fichiers successifs (différés de 30 minutes), le fichier renommé remplacera le suivant, il est donc préférable d'ajouter les secondes au nom de fichier renommé afin qu'il reste sécurisé. Sinon, vous devez enregistrer les fichiers renommés dans un répertoire différent, puis les remplacer par les fichiers d'origine ultérieurement.
la source
Filename_
dans la méthode de renommage./path/to/file
par le chemin complet du répertoire?À l'aide de
bash
, les fichiers renommés se trouvent dans un nouveau sous-dossierrenamed
.Démarrez le script dans le dossier où se trouvent les fichiers.
exemple de sortie:
la source
renamed
FileName_123.Data_YYYY_MM_DD_HHMM.dat
la partie.Data_YYYY_MM_DD_HHMM.dat
est l'extension. EtFileName_123
n'est donc pas un horodatage valide.SCÉNARIO
Ceci est la version éditée de mon script original. OP ne fournissait pas à l'origine d'informations complètes sur le format de dénomination. Ce script s'adapte à ce que OP a mentionné dans les commentaires était la dénomination correcte du fichier.
* Notes techniques: *
Dans ce script, nous séparons le nom de fichier en 6 champs distincts en utilisant awk, avec un trait de soulignement comme délimiteur de champ. Les deux premiers champs, $ 1 et $ 2 sont considérés comme une chaîne de texte statique. Les champs 3,4,5 et 6 sont l'horodatage auquel les données d'OP ont été échantillonnées, pas la date de création du fichier sur le système de fichiers.
La variable COPYDIR contient le nom du nouveau répertoire où les fichiers avec l'horodatage mis à jour iront. Nous créons ce répertoire dans le répertoire de travail actuel avec
mkdir $COPYDIR
Les variables TEXTSTRING et DATESTRING contiennent respectivement le texte statique et l'horodatage. Dans l'exemple ci-dessous, j'ai utilisé deux chaînes différentes pour prouver que le script fonctionnera quel que soit le texte des deux premiers champs.
NEWEPOCHTIME est une variable qui contient le nouvel horodatage calculé au format d'époque unix. NEWDATE est une variable qui contient l'horodatage converti de l'époque unix au format AAAA-MM-JJ HH: MM. NEWAPPEND est l'horodatage réel qui sera ajouté au fichier au format YYYY_MM_DD_HHMM OP souhaité.
cp $file "$COPYDIR"/"%TEXTSTRING""$NEWAPPEND".dat
copie l'ancien fichier dans le répertoire "convert_files" (au lieu de le déplacer, pour éviter la perte de données) avec le datastamp mis à jour.Remarquez , le script fonctionnera tant que le format de nommage est vraiment suivi, c'est-à-dire que tous les fichiers ont vraiment un
SomeText_123.Data_YYYY_MM_DD_HHMM.dat
format.SCRIPT EN ACTION
La démonstration ci-dessous est une copie directe de mon terminal. Notez que j'ai créé des fichiers originaux avec deux chaînes différentes dans les deux premiers champs. Donc, ce script devrait fonctionner, peu importe ce qui se trouve au début du nom de fichier, tant qu'il n'y a vraiment que deux chaînes séparées par un trait de soulignement
Le script a été nommé
notes-conversion
parce que j'ai développé le script à partir des notes que j'ai prises en travaillant sur cette question.Notez que les noms de fichiers dont la partie HHMM est 2345 (soit 15 minutes avant minuit) sont mis à jour à 0015 et la partie DD est mise à jour le jour suivant. Format 24 heures conservé.
De plus, comme la boucle ne recherche que des
.dat
fichiers, nous évitons de renommer d'autres fichiers ou répertoires qui peuvent se trouver dans le répertoire de travail, évitant ainsi toute perte de données potentielle. Dans l'exemple ci-dessous, le répertoire d'origine contient 11 éléments, dont 3 sont des*.txt
fichiers à tester, nous ne travaillons donc qu'avec 8.dat
fichiers. Dans le répertoire où vont les fichiers mis à jour, nous voyons 8 fichiers, tous.dat
et aucun autre fichier. Les données sont en sécurité, le script fait son travail.EXPLICATION (du message d'origine)
*) Aujourd'hui, j'ai appris que les systèmes Unix-Linux comptent le temps dans le temps Epoch , ou simplement mettent des secondes.
*) le script prend chaque nom de fichier, extrait la date, le convertit en époque, ajoute 1800 secondes (soit exactement 30 minutes) et enregistre le fichier avec ce nouvel horodatage.
*) Ce script répond à ce que voulait OP - changer l'horodatage du nom de fichier, pas mettre à jour l'heure de création du fichier lui-même
Les outils utilisés:
ubuntu 15.04
GNU bash 4.3.30
GNU awk 4.1.1
date (GNU coreutils) 8.23
la source
find
commande, ce qui est également bon.Vous pouvez utiliser ce code pour faire ce dont vous avez besoin en supposant
le code est:
Comment ça marche: Le code vérifiera la partie minutes dans le nom du fichier
MM
puis s'il est inférieur à 30 il ajoutera 30 àMM
s'il est égal à 30 ou plus il ajoutera 1 heure à laHH
partie dans le nom et déduira 30 minutes de laMM
une partie du nomla source