#!/bin/bash
# symlinks.sh : Liste les liens symboliques d'un répertoire.


repertoire=${1-`pwd`}
#  Par défaut, le répertoire courant, si le répertoire n'est pas spécifié.
#  Équivalent au bloc de code ci-dessous.
# -----------------------------------------------------------------
# ARGS=1                 # Attend un argument en ligne de commande.
#
# if [ $# -ne "$ARGS" ]  # Si sans argument...
# then
#   repertoire=`pwd`     # répertoire courant
# else
#   repertoire=$1
# fi
# -----------------------------------------------------------------

echo "Liens symboliques dans le répertoire \"$repertoire\""

for fichier in "$( find $repertoire -type l )"   # -type l = liens symboliques
do
  echo "$fichier"
done | sort        # Sinon la liste de fichiers n'est pas triée.
#  La boucle n'est ici pas réellement nécessaire,
#+ car la sortie de la commande "find" est étendue en un seul mot.
#  Néanmoins, il est facile de le comprendre et de l'illustrer.

#  Dominik 'Aeneas' Schnitzer nous indique que ne pas mettre entre guillemets
#+ $( find $repertoire -type l )
#+ ferait échouer le script sur les noms de fichier comprenant des espaces.
#  Même cette écriture ne recueillera que le premier champ de chaque argument.

exit 0


# --------------------------------------------------------
# Jean Helou propose l'alternative suivante :

echo "Liens symboliques dans le répertoire \"$repertoire\""
# Sauvegarde du IFS actuel. On n'est jamais trop prudent.
OLDIFS=$IFS
IFS=:

for fichier in $(find $repertoire -type l -printf "%p$IFS")
do     #                                  ^^^^^^^^^^^^^^^^
	echo "$fichier"
done|sort

# Et James "Mike" Conley suggère cette modification du code de Helou :

OLDIFS=$IFS
IFS='' # Un IFS vide signifie aucun séparateur de mots
for fichier in $( find $directory -type l )
do
  echo $fichier
  done | sort

#  Ceci fonctionne dans le cas "pathologique" d'un nom de répertoire contenant
#+ une virgule.
#  "Ceci corrige aussi le cas "pathologique" d'un nom de répertoire contenant
#+ une virgule (ou espace, comme dans un exemple précédent)."
