[comp.os.minix] find

erikb@cs.vu.nl (Erik Baalbergen) (06/01/89)

Inspired by a discussion in comp.unix.questions on how to find path names
from inode numbers, I felt the need to spend few minutes on extending
the 'find' program with the -xdev option to prevent 'find' to cross file
system boundaries. (Thanks to Guy Harris who made me aware of the
existence of -xdev in some UNIXes.)
I haven't been able to test the new find on Minix, but I would be grateful
if some kind soul could inform me whether -xdev really works.
"find / -xdev -print" and "find / -print" should produce a rather short and
a very, very long list of file names, respectively.

Below I enclosed a diff listing between the 1.3 version and the new version.

--
Erik Baalbergen

: This is a shar archive.  Extract with sh, not csh.
: This archive ends with exit, so do not worry about trailing junk.
: --------------------------- cut here --------------------------
PATH=/bin:/usr/bin:/usr/ucb
echo Extracting 'find.c.diff'
sed 's/^X//' > 'find.c.diff' << '+ END-OF-FILE ''find.c.diff'
X8a9
X> 	* -xdev: do not cross file system boundaries
X51a53
X> #define OP_XDEV		17	/* do not cross file-system boundaries */
X72a75
X> 	{"xdev",	OP_XDEV},
X102a106,107
X> int xdev_flag = 0;
X> int devnr;
X139c144,146
X< 	for (i = 0; i < pathcnt; i++)
X---
X> 	for (i = 0; i < pathcnt; i++) {
X> 		if (xdev_flag)
X> 			xdev_flag = 2;
X140a148
X> 	}
X158a167
X> 
X161a171,183
X> 		switch(xdev_flag) {
X> 		case 0:
X> 			break;
X> 		case 1:
X> 			if (st.st_dev != devnr)
X> 				return;
X> 			break;
X> 		case 2:	/* set current device number */
X> 			xdev_flag = 1;
X> 			devnr = st.st_dev;
X> 			break;
X> 		}
X> 
X229a252,253
X> 	case OP_XDEV:
X> 		return 1;
X451a476,478
X> 		break;
X> 	case OP_XDEV:
X> 		xdev_flag = 1;
+ END-OF-FILE find.c.diff
chmod 'u=rw,g=r,o=r' 'find.c.diff'
set `wc -c 'find.c.diff'`
count=$1
case $count in
681)	:;;
*)	echo 'Bad character count in ''find.c.diff' >&2
		echo 'Count should be 681' >&2
esac
exit 0