#! /bin/sh ### -*-sh-*- ### ### Find files which could be links to the repository ### ### (c) 1997 Mark Wooding ### ###----- Licensing notice --------------------------------------------------- ### ### This file is part of the Common Files Distribution (`common'). ### ### `Common' is free software; you can redistribute it and/or modify ### it under the terms of the GNU General Public License as published by ### the Free Software Foundation; either version 2 of the License, or ### (at your option) any later version. ### ### `Common' is distributed in the hope that it will be useful, ### but WITHOUT ANY WARRANTY; without even the implied warranty of ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ### GNU General Public License for more details. ### ### You should have received a copy of the GNU General Public License ### along with `common'; if not, write to the Free Software Foundation, ### Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. set -e pkgdatadir="@pkgdatadir@" VERSION="@VERSION@" ###-------------------------------------------------------------------------- ### Parse command line arguments. while [ $# -gt 0 ]; do case "$1" in -h | --h | --he | --hel | --help) cat <&2 exit 1 ;; esac shift done ###-------------------------------------------------------------------------- ### Read the names of all the files I support. ### ### ### Yes, this is ugly and hacky: well spotted. Shells have a nasty habit of ### spontaneously forking when redirection gets too hard for them to think ### about, so instead of something nice along the lines of ### ### find ... | while read name; do done ### ### I have to stick the whole lot in backticks and echo the result when it's ### all done. Yuk. ### ### Oh, I almost forgot: that colon on the end there, that's to make sure ### that all the entries are surrounded by colons on both sides, which makes ### the pattern match in the `case' below work properly. files=$( files="" find "$pkgdatadir" -type f -print | { while read name; do files="$files:$(echo "$name" | sed 's;^.*/;;')" done echo $files } ): ###-------------------------------------------------------------------------- ### Now examine the current directory. ### ### Remember to include things which are already linked, so that users can ### say `findlinks >.links' without any problems. find . \( -type f -o -type l \) -print | while read name; do base="$(echo "$name" | sed 's;^.*/;;')" case "$files" in *:$base:*) echo $name ;; *) esac done | sed 's,^\./,,' | sort ###----- That's all, folks --------------------------------------------------