2012-10-29 7 views
0

logfiles Étant donné dans un répertoire estampillé comme celui-ci:Logrotate et Script Shell

 
log_from_2012_08_14-11:57:21_To_2012_09_14-11:56:12.zip 
log_from_2012_10_14-11:57:21_To_2012_11_14-11:56:12.zip 

Et étant donné qu'il ya environ 155450 fichiers comme celui-ci, comment puis-je faire ce qui suit de façon simple ou efficace:

Utilisez logrotate, ou un autre outil, pour créer un dossier pour chaque mois: mkdir $ currentMont = octobre, par exemple, et placez tous les fichiers d'octobre 2012, et ainsi de suite, pour chaque mois.

+0

Ces journaux s'étendent sur 2 mois. Voulez-vous les trier par heure de début? –

+0

hmmm c'est un exemple mes serveurs ont des logs pour chaque 2 heures :) – drd0sPy

Répondre

1

Cela ressemble à un script bash avec quelques boucles imbriquées pour faire l'affaire.

quelque chose comme:

for year in $(seq -f "%02g" 0 20); do 
    for month in $(seq -f "%02g" 0 12); do 
     dest = "20${year}-${month}" 
     mkdir "$dest" 
     mv "log_from_${dest}*" "${dest}"; 
    done; 
done; 

Il est clair que vous devez modifier cela à vos besoins. S'il y a trop de fichiers dans un répertoire, vous pouvez atteindre la limite de la ligne, auquel cas vous devrez utiliser find . | xargs mv pour éviter ce problème.

+0

oui mais merci beaucoup pour l'aide je pense que la limite glob apparaîtra presque à coup sûr je peux même faire un ls dans le dir le serveur s'arrête juste ... en raison de la capacité triée de ls je dois faire un ls -f pour voir les fichiers ... imaginez une boucle for lol – drd0sPy