Archives de catégorie : Scripts Shell

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

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