2012-03-05 1 views
1

Je crée une application qui écrit des fichiers journaux tous les jours et je voudrais savoir quel devrait être le nom de fichier pour chaque jour, donc si tous les fichiers situés dans le même dossier qu'ils seraient commandés dans un ordre décroissant (du plus récent au plus ancien)?Quel devrait être le nom de fichier pour les fichiers avec le nom de date afin qu'il ordonne par desc

+0

Pratiquement chaque shell existant a la capacité de trier par métadonnées de fichiers, ce qui inclut le temps de création. par exemple. 'ls -t' ou' dir/od' –

+0

plus facile de rendre la vie plus facile puisque je ne sais pas combien de fichiers vont être créés, je veux toujours que le dernier soit en haut de la liste. – Popokoko

+0

puis l'option de tri de fichiers est la plus fiable, car vous ne dépendez pas des noms de fichiers pour la commande. –

Répondre

0

Je vous recommande d'utiliser le format suivant: "aaaa-MM-jj_hh_mm_ss" et de trier vos fichiers dans votre dossier par nom, en descendant.

+0

... et s'il peut y avoir plusieurs instances de votre application, ajoutez pid (identificateur de processus) pour enregistrer le nom de fichier –

+0

Ceci n'est pas exactement exact car aaaa-MM-jj ... causerait que le premier fichier soit 2012-03 -01 et deuxième fichier serait 2012-04-01 dans ce cas 04 devrait être le premier depuis avril est le plus récent. – Popokoko

+0

C'est pourquoi j'ai mentionné trier les fichiers dans le dossier par nom décroissant. Je suppose qu'il a cette fonctionnalité à sa disposition quelle que soit la méthode qu'il consulte ses fichiers. – Khan

0

Vous pouvez Soustraire une date à l'avenir, de 2033, par exemple:

echo $((2000*1000*1000 - $(date +%s))) 
669025348 

La multiplication est beaucoup mieux lisible que 2000000000. La date actuelle s est:

date +%s 
1330974665 

si Ce sera une méthode stable pour environ 20 ans à partir de maintenant.

Une façon plus lisible serait, pour nier toutes les parties de la date numérique:

echo > $(date +-%Y.-%m.-%d.-%H.-%M.-%S) 

ls 
-2012.-03.-05.-20.-46.-07 -2012.-03.-05.-20.-46.-16 -2012.-03.-05.-20.-46.-24 
ls | sort -n 
-2012.-03.-05.-20.-46.-07 
-2012.-03.-05.-20.-46.-16 
-2012.-03.-05.-20.-46.-24 

Il semble curios, n'est pas agréable à manipuler, puisque vous devrez utiliser

rm -- * 

pour supprimer tous ces fichiers, car

rm * 

conduira à une mauvaise interprétation du signe -. Mais vous pouvez détecter la date réelle. Pourquoi s'inquiéter de la dénomination de fichier?

+0

merci pour la réponse MAIS je ne vois pas vraiment comment est la sortie liée aux dates .. peut-être ce que j'essaie de réaliser n'est pas vraiment possible? – Popokoko

+0

Pour voir à partir de quelle date les origines du fichier, vous devez faire 'ls -l'. Comment pensez-vous qu'un tri vers l'arrière devrait être possible avec des dates lisibles? Une autre idée serait de simplement mettre un "-" devant chaque datepart. Je l'ai mis dans la réponse. –

Questions connexes