Flash Notes

Commandes - Fichiers dont aucune ligne ne correspond à une expression régulière


• Comment lister les fichiers dont aucune ligne ne correspond à une expression régulière donnée ?

Solution

Supprimer de la liste des fichiers les noms de ceux dont au moins une ligne correspond à l'expression régulière

Programme

#!/bin/sh
#
# Recherche des fichiers ne contenant pas une expression reguliere
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# fmissre : File MISSing Regular Expression
#
TMP_LISTE1="/tmp/fmisstr_liste1.$$"
TMP_LISTE2="/tmp/fmisstr_liste2.$$"

if [ "$2" = "" ]; then
echo "Usage: $0 expression_reguliere fichier [fichier ...]"
exit 1
fi

RE="$1"
shift

# Constitution de la liste complete des fichiers a examiner
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ls -1 "$@" | sort > "$TMP_LISTE1"

# Constitution de la liste des fichiers contenant l'expression
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
grep -l "$RE" "$@" | sort > "$TMP_LISTE2"

# Affichage de la liste des fichiers ne contenant pas l'expression
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
comm -3 "$TMP_LISTE1" "$TMP_LISTE2"

# Effacement des fichiers temporaires
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
rm -f "$TMP_LISTE1" "$TMP_LISTE2"

Exemple 1

$ fmissre Commandes page_*_FR.html
page_000000_FR.html
page_000004_FR.html
page_000005_FR.html
page_000006_FR.html
page_000009_FR.html
page_000012_FR.html
page_000013_FR.html