SOLUTIONS Stage rentrée UNIX - Partie I
                                         2ème année Ecole d'Informatique - Filière RICM
 

section 1.7
ls *.c
ls [h,s]*
ls [h*,s*]
ls ?????

section 3.1
more /etc/passwd | grep durand

section 3.2
find . -name "XXX" -exec ls {} \;

section 3.3
sort -t ':' +1

section 3.6
Il faut ajouter un droit d'exécution au fichier essai

section 3.7
tar cvf TEST.tar rep
gzip TEST.tar

section 4.6
ls > ls_res
ls >> ls_res
ls -l | wc -l compte le nombre de fichiers dans le répertoire courant

ls -l > f ; wc -l f ; rm f

section 5.6
rsh frege "xterm -display <nom_display>"
avec le .rhost sur frege contenant : <nom_display>.<nom_domaine> <nom_user>

section 7.4
#!/bin/tcsh
# compte le nombre de fichiers présents dans le répertoire /usr/bin
set f=(/usr/bin/*)
echo $#f

section 7.8
#!/bin/tcsh
# compte les lignes de chaque fichier présent dans le répertoire /usr/bin
set l=(/usr/bin/*)
foreach i ($l)
   wc -l $i

section 7.9
#!/bin/tcsh
# compte les lignes de chaque fichier présent dans le répertoire donné en paramètre
set l=($*)
foreach i ($l)
   wc -l $i

section 7.11
#!/bin/tcsh
# place les fichiers dans les répertoires Src, Inc et Obj
foreach i ($argv)
    switch ($i)
    case *.c :
        echo ".c"
        mv $i Src
        breaksw
    case *.h :
        echo ".c"
        mv $i Inc
        breaksw
    case *.o :
        echo ".c"
        mv $i Obj
        breaksw
    default :
        echo "autre"
    endsw
end

 

#!/bin/tcsh
# affiche les fichiers dont la taille dépasse une limite donnée en paramètre
# version avec utilisation de la commande du
# (on peut aussi écrire une version avec utilisation de la commande find)
if ($#argv < 1) echo "usage dusup size files"
@ du=0
@ size=0
set size = $argv[1]
shift
foreach i ($argv)
    set du=`du -s $i | cut -d'    ' -f1`   [l'option -d n'est nécessaire que sur certains systèmes]
    if ($du > $size) echo $i $du
end

#!/bin/tcsh
# change une chaine de caractères par une autre dans les fichiers indiqués en paramètre
if ($#argv < 3) echo "usage chstr str newstr files"
set str=$argv[1]
set newstr=$argv[2]
shift
shift
foreach i ($argv)
    echo $i
    sed -e s/$str/$newstr/g $i
end

Partie I. Shell qui gère les destructions de fichiers
#!/bin/sh
PROGNAME=$0
TRASH_DIR=$HOME/trash
while test -n "$1" do
     if test $1 = ~ -o $1 = / then
      echo $PROGNAME: error: hazardous operation canceled.
     elif test $1 = core then
      /bin/rm -f $1
     else
        if test -f $TRASH_DIR/$1 -o -d $TRASH_DIR/$1 then
             /bin/rm -fr $TRASH_DIR/$1
        fi
        /bin/mv -f $1 $TRASH_DIR/
    fi
   shift
done

Script de visualisation d'un répertoire
#!/bin/tcsh
# Script : visualisation du contenu d'un repertoire sous forme d'arbre
#
alias ls "/bin/ls"

# ATTENTION :
# mettre ici le chemin d'acces a 'dirlist'
set DIRLISTPATH = "~/VotreTP/Seance1/Ex2"

# verification du nombre d'argument et mise a jour des variables globales
if ($#argv > 2) then
 echo "Format incorrect : usage = dirlist [dir [separateur]]"
else
# DEC contiendra la chaine utilisee en separateur
# CWD contiendra le chemin actuel
 if ($#argv == 0) then
#  premier mode : dirlist
  set DEC = "......."
  set CWD = `pwd`
 else
  if ($#argv == 1) then
#   deuxieme mode : dirlist nom_de_repertoire
   set DEC = "......."
   set CWD = $argv[1]
   echo $CWD
  else
#   troisieme mode : dirlist nom_de_repertoire separateur
   set DEC = $argv[2]
   set CWD = $argv[1]
  endif
 endif

# a present, affichage du contenu du repertoire
cd $CWD
set MPWD=`pwd`
set DDEC = "......."
set FDEC = "______"
set K = 0
set LS = `ls`

if ($#LS != 0) then
# le repertoire n'est pas vide
# K contiendra le nombre d'element
 foreach I ($LS)
#  expr est un outil qui permet d'evaluer une expression. faites le man !
  set K = `expr $K + 1`
 end
 set J = 0
 foreach I ($LS)
  set J = `expr $J + 1`
  if ( -d $I ) then
#   $I contient le nom d'un repertoire
   echo $DEC\|$FDEC$I\/
#   on repart en recursif !
   if ($J == $K) then
    tcsh $DIRLISTPATH/dirlist $I $DEC\.$DDEC
   else
    tcsh $DIRLISTPATH/dirlist $I $DEC\|$DDEC
   endif
  else
   echo $DEC\|$FDEC$I
  endif
 end
endif
cd $MPWD