Archives mensuelles : janvier 2012

Magie de la commande find – part 1

30 012012

find est une commande de ouf. je suis loin loin de maîtriser, mais voici quelques unes de mes utilisations favorites :

rechercher un fichier par son nom :

find . -name *.htc -print

rechercher une chaine de charactères dans un fichier :

find . -type f -print | xargs grep -n ma_chaine_a_rechercher

(comparer la vitesse à celle d’un IDE ou d’un gestionnaire de fichiers graphique..)

rechercher des fichiers par taille (utile pour repérer un fichier de log qui part en sucette) :

find . -type f -size +200M -print

rechercher des fichiers modifiés récemment :

find . -mtime -1 -print

ex : prendre les fichiers créés depuis 24h et les archiver dans un tar !

find . -type f -ctime -1 |xargs tar -czvf recent.tar.gz
Publié dans Scripts Shell | Marqué avec , , , | Laisser un commentaire

Validator Custom pour Entités

10 012012

Exemple de validator custom avec une validation de l’âge sur des dates de naissance :

MonBundle/Validator/Majeur.php

namespace Maboite\MonBundle\Validator;

use Symfony\Component\Validator\Constraint;

/**
* @Annotation
*/

class Majeur extends Constraint
{
public $message = 'Vous devez être majeur-e pour jouer.'; //<- le message par défaut
}

MonBundle/Validator/MajeurValidator.php

namespace Maboite\MonBundle\Validator;

use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;

class MajeurValidator extends ConstraintValidator
{
    public function isValid($value, Constraint $constraint)
    {
        $now=new \DateTime("now");
        $diff=$value->diff($now);
       
        // ( le test sur l'année ne suffit pas car diff renvoie une "vraie" différence tenant compte des années bisextiles )
        if ($diff->y == 18) {
            if ($diff->m > 1) return true;
            if (intval($now->format('j')) >= intval($value->format('j'))) return true;
        } else {
        if ($diff->y > 18) {
            return true;
        }
        }
       
        $this->setMessage($constraint->message);
        return false;
       
       
       
    }
}

Dans l’entité concernée on peut utiliser la validation :

MonBundle/Entity/User.php

....
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints as DoctrineAssert;

use Maboite\MonBundle\Validator\Majeur as Majeur;

....

/**
* @var date $datenaissance
*
* @ORM\Column( type="date")
* @Assert\NotBlank(message="Veuillez saisir votre date de naissance.")
* @Majeur(message="Vous devez être majeur-e pour jouer.")
*/

private $datenaissance;

voilà maintenant la contrainte fonctionnera comme les contraintes prédéfinies lors de vos appels à $form->isValid()

Publié dans Symfony | Marqué avec , , , , , , | Laisser un commentaire

Happy 2012

09 012012

By the way… mes voeux de nouvelle année 2012 réalisés sous forme d’animations javascript 1k

Publié dans Javascript | Marqué avec | Laisser un commentaire

Fonctions récursives dans un script shell

05 012012

En cherchant un petit script pour compter des lignes de code dans un dossier, je suis tombé sur la problématique de la récursivité pour parcourir les sous dossiers.
N’étant pas un spécialiste du shell, je ne savais pas qu’on pouvait déclarer des fonctions en shell, donc voici comment faire :

#!/bin/bash

fichierstexte=( html phtml php css js yml );
nbextensions=${#fichierstexte[@]}
nblignes=0
nbfichiers=0

if [ -z "$1" ]
then
    echo "manque argument du dossier"
    exit
fi



recursiveCount() {
    for file in "$1"/*; do
        if [ -f "$file" ]
        then
            extension="${file#*.}"
            for ((i = 0; i < nbextensions; i++)); do
                if [ ${fichierstexte[i]} = $extension ]
                then
                    nb=`wc -l < $file`
                    nblignes=$((nblignes + nb +1))
                    nbfichiers=$((nbfichiers + 1))
                fi
            done

        elif [ -d "$file" ]
        then
            recursiveCount "$file"
        fi
    done
}

recursiveCount $1

echo "nombre de lignes dans $1"
echo "total lignes : $nblignes"
echo "total fichiers : $nbfichiers"

le script produit ce genre de sortie :

julien@julien-desktop:~/Sites$ ./countlines.sh jsproxy/
nombre de lignes dans jsproxy/
total lignes : 8694
total fichiers : 40

à améliorer pour pouvoir passer plus de paramètres comme des dossiers à exclure par exemple.

Publié dans Scripts Shell | Marqué avec , , , , | Laisser un commentaire