2010-04-03 5 views
3

J'essaye d'écrire un script shell sous Linux, qui répertorie tous les dossiers (récursivement) avec un certain nom et aucun lien symbolique pointant vers lui.Trouver des dossiers avec un nom spécifique et aucun lien symbolique pointant vers eux

Par exemple, j'ai:

/home/htdocs/cust1/typo3_src-4.2.11 
/home/htdocs/cust2/typo3_src-4.2.12 
/home/htdocs/cust3/typo3_src-4.2.12 

Maintenant, je veux passer par tous les sous-répertoires/home/htdocs et trouver ces dossiers typo3_ *, qui ne sont pas pointés à quelque part.

Devrait être possible avec un shellscript ou une commande, mais je ne sais pas comment.

Merci pour vous aider à

Stefan

Répondre

1

Je pense qu'aucun des systèmes de fichiers courants magasin s'il y a des liens symboliques pointant vers ce fichier dans le nœud de fichier, vous devrez analyser tous les autres fichiers pour voir si c'est un lien symbolique vers celui-ci. Si vous ne limitez pas la profondeur de votre recherche à un certain niveau, cela peut prendre beaucoup de temps. Si vous souhaitez effectuer cette recherche dans /home/htdocs, par exemple, cela fonctionnerait quelque chose comme ceci:

# find specified folders: 
find /home/htdocs -name 'typo3_*' -type d | while read folder; do 
    # list all symlinks pointing to $folder 
    find -L /home/htdocs -samefile "$folder"|grep -v "$folder\$" 
done 
+0

Cela échouera si des répertoires ont des espaces dans leurs noms. Vous devriez rediriger le premier 'find' dans une boucle' while while'. De plus, dans certaines circonstances inhabituelles, le 'grep -v' * pourrait * éliminer à tort les répertoires car il n'y a aucune ancre dans le motif. –

+0

@Dennis Williamson: Merci pour les commentaires, mise à jour de la réponse – soulmerge

Questions connexes