Forum Linux.général readme automatique lors d'un ls

Posté par  .
Étiquettes : aucune
0
7
mar.
2006
Je cherche une méthode pour voir s'afficher le contenu d'un fichier d'aide lors d'un ls d'un répertoire, genre :

/monrep/README
/monrep/dossierun/
/monrep/dossierdeux/
/monrep/monfichiera
/monrep/monfichierb

Je voudrais que lorsque je fait un "ls /monrep" s'affiche le contenu du fichier README puis le répertoire.

Apache emploie cette méthode, et je trouverais ça fort utile avec "ls" et je serais fort étonné que ça n'existe pas déjà.
  • # readme automatique lors d'un ls

    Posté par  . Évalué à 2.

    Bonjour,

    Cela doit être faisable avec un alias de ls et une fonction en bash.
    Quand tu appelleras ton ls personnel, il cherchera tout dabord s'il s'y trouve un fichier README.
    Si oui ... il fera un 'cat' du fichier.
    Ensuite le ls sera effectué.
    Mais pour ce qui est question du code je ne pourrai pas t'aider.
    J'en suis sur qu'une bonne âme passera par ici pour t'aiguiller ;)
  • # autre chose que les aliases

    Posté par  . Évalué à 1.

    j'avais eu ce besoin et j'avais trouvé un truc sympa à l'époque
    et je l'ai utilisé pour gicler l'utilisateur root (autre que moi)
    du dossier /var/spool/mail ;) parce que ses pratiques ne me plaisaient pas du tout (big-brotherite aigue).
    ça s'appelle ondir et ça marche: http://swapoff.org/OnDir

    ça peut exécuter des actions sur entrée/sortie d'un dossier
    ce qui n'est pas exactement ce que tu as demandé mais ça s'en rapproche
    et ça va en intéresser plus d'un, je pense.
  • # En espérant que ça aide :

    Posté par  . Évalué à 3.

    Sous bash, j'ai tapé ça au prompt :

    truc() { [ -f $1/README ] && less $1/README ; ls $1 ; }

    Ca fait ce que tu demandes.
    • [^] # Re: En espérant que ça aide :

      Posté par  . Évalué à 3.

      Petite amélioration:
      truc() { d=${1:-.}; [ -f $d/README ] && less $d/README ; ls $d ; }
      alias ls=truc


      Permet de gérer en plus le cas particulier ls sans argument qui liste le répertoire courant.
      • [^] # Re: En espérant que ça aide :

        Posté par  . Évalué à 2.

        En effet, je n'avais pas pensé à ce cas là.
        Pour rebondir sur la réponse donnée par l'initiateur de cette question, voici donc un petit complément un peu plus argumenté....
        Le truc aurait peut-être été mieux ainsi :

        Mettre ça dans le .bashrc :

        lsreadme () { d=${1:-.}; [ -f $d/README ] && less -F -X $d/README ; /bin/ls $d ; }
        alias ls=lsreadme


        A noter qu'il est toujours possible d'appeler le programme ls original :
        - soit en l'appelant complètement : /bin/ls
        - soit en préfixant la commande d'un antislash : \ls

        J'ai mis less à la place de cat, au cas où le fichier README serait plus important et prendrait plus d'un écran. Le -F dit à less de quitter automatiquement si le fichier fait moins d'un écran, et le -X lui demande poliment d'arrêter d'effacer ce @#!% d'écran quand il a fini.
        Voilà, c'est peut-être un peu plus court que la solution retenue.
        Mais ce qui reste la force du libre, c'est la diversité et la liberté de choisir !
  • # Solution adoptée

    Posté par  . Évalué à 2.

    J'ai essayer toutes vos solutions, l'idée était de rendre transparente cette fonctionnalité, avec la solution de niol j'ai un problème lorsque je passe des arguments a ls, avec celle de B. franck c'est en effet pas tout a fait ça, et avec celle de D B je dois changer mes habitude et utiliser "truc" lorsque je veux lister un répertoire, j'ai donc écrit un petit code perl qui joue l'intermédiaire :


    #!/usr/bin/perl

    use Getopt::Long;

    my $readme = ".README" ;

    my $a = '' ;
    my $l = '' ;
    my $color = '' ;

    unshift @ARGV, $ENV{LS_OPTIONS} ;

    GetOptions ( 'a' => \$a, 'l' => \$l, 'color=s' => \$color ) ;

    $args .= "-a " if $a ;
    $args .= "-l " if $l ;
    $args .= "--color=$color " if $color ;

    push @ARGV, "." unless @ARGV ; # pour qu'un ls sans arguments fonctionne aussi
    system "/bin/cat @ARGV/$readme" if ( ! -l "@ARGV" && -e "@ARGV/$readme" ) ;
    exec "/bin/ls $args @ARGV" ;

    en enregistrant ce script dans /bin/lsreadme et en modifiant le .bashrc comme suit :

    eval "`dircolors`"
    export LS_OPTIONS='--color=auto'
    export LS='/bin/lsreadme'
    alias ls='$LS $LS_OPTIONS'
    alias ll='$LS $LS_OPTIONS -l'

    je n'ai repris que les arguments que j'utilise couramment, le script respecte les options fournies par la variable LS_OPTIONS, ce qui permet a l'occasion de lancer directement /bin/ls en utilisant aussi les options de LS_OPTIONS, il réagit assez bien, son utilisation semble réellement transparente pour l'utilisateur, il y a probablement moyen de faire mieux pour les arguments.

    Je vais pouvoir documenter mes répertoires de script pour que dans 3 ans lorsque j'aurais oublier ce bidouillage j'utiliserais bêtement un "ls" je me souviendais de votre aide fraternel et je retrouverais aisément ce que je cherche...

    twin2:~# ll /conf/twin2/scripts/mysql
    --------------------------------------------------
    -> update.pl
    Met a jour les fichiers openDB.txt avec
    les informations des fichiers config2.xml.

    total 4
    -rwxr-xr-x 1 root root 1540 2006-03-03 09:16 update.pl
    twin2:~#

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.