[bug #20970] Trailing slash on directory arguments breaks -name

2007-09-04 Thread Ross Kendall Axe

Follow-up Comment #2, bug #20970 (project findutils):

Just for fun, I tried it on FreeBSD as well, with identical results to GNU
find.  I had intuitively assumed that the -name thing was a no-brainer, for
basically the reasons you mentioned (though I don't have a copy of POSIX
available), but it seems like this odd behaviour is quite common.  Either way,
I was surprised as hell when "find /usr/man/ -name 'man?*'" matched /usr/man
itself, and I shall try to avoid trailing slashes in my scripts or use
-wholename or -samefile from now on to work around this corner case.

As for the trailing slash in the output, that's a good point about symlinks. 
I'm even more convinced now that that's probably best left alone.

Two things immediately spring to mind about multiple trailing slashes in the
output:
1) I would expect "find foo// -wholename foo//" to match, so maybe some care
would need to be taken (should "find foo// -wholename foo/" also match?), and
2) Processing the output with sed or somesuch might break for similar reasons
if the extra slashes were removed (although -printf is probably better for
most things you could do with sed).

Things like that make me think that probably only -name is worth changing,
especially since "tr -s /" gets rid of the extra slashes easily enough. :-)

___

Reply to this item at:

  

___
  Message sent via/by Savannah
  http://savannah.gnu.org/





[bug #20970] Trailing slash on directory arguments breaks -name

2007-09-04 Thread Ross Kendall Axe

URL:
  

 Summary: Trailing slash on directory arguments breaks -name
 Project: findutils
Submitted by: rossaxe
Submitted on: Tuesday 04/09/07 at 07:19
Category: find
Severity: 3 - Normal
  Item Group: Wrong result
  Status: None
 Privacy: Public
 Assigned to: None
 Originator Name: 
Originator Email: 
 Open/Closed: Open
 Discussion Lock: Any
 Release: 4.2.31
   Fixed Release: None

___

Details:

The following commands illustrate the problem:

$ mkdir -p foo/bar
$ find foo -name foo
foo
$ find foo/ -name foo

The first command returns the directory 'foo', as expected, but the second
one does not find it, apparently because the trailing / was considered to be
part of the filename.  The following test seems to confirm this:

$ find foo/ -name foo/
find: warning: Unix filenames usually don't contain slashes (though pathnames
do).  That means that '-name foo/' will probably evaluate to false all the
time on this system.  You might find the '-wholename' test more useful, or
perhaps '-samefile'.  Alternatively, if you are using GNU grep, you could use
'find ... -print0 | grep -FzZ foo/'.
foo/

Despite the warning message about slashes in the -name match, it does in fact
work.  This issue is probably related to the following oddity:

$ find foo
foo
foo/bar
$ find foo/
foo/
foo/bar

The first command is perfectly consistent in that it doesn't have trailing
slashes in the output, but the second command does have a trailing slash on
one directory, but not the other.  I'm not entirely sure whether this
behaviour is a good thing or not.  Possibly the second command should produce
'foo//bar' (2 slashes) for consistency.

There is a similar effect when using -wholename, but that may actually be the
best behaviour.




___

Reply to this item at:

  

___
  Message sent via/by Savannah
  http://savannah.gnu.org/