> > What's odd is that `find -xdev -- foo` doesn't work, yet `find --
> > foo` does. I expected -- to be properly interpreted as the end of
> > options indicator, as per the manual.
>
> In the case 'find -xdev --' the '--' is coming after the first
> expression because '-xdev' is a predicate.
>
> In the case 'find -- foo' the '--' is coming before the first
> expression because 'foo' is a path.
>
> This is entirely consistent with the manual. The optional '--' just
> has to come before the first expression if something that could be
> ambiguously interpreted as an option is an argument to an expression.
That's what I'm doing…
$ touch ./-f
$ find -- -f
find: unknown predicate `-f'
So let's double-check the man page.
find(1):
A double dash -- can also be used to signal that any remaining
arguments are not options
So the remainder are treated as expressions, "real options", or paths?
I'd have thought that the remainder would be treated as paths. Are you
saying that they're treated as expressions (like -name, -whatever as
long as it isn't -H and friends)?
find(1):
(though ensuring that all start points
begin with either `./' or `/' is generally safer if you use
wildcards in the list of start points).
This parenthesis would make me think that the remaining get treated as
paths, not expressions. I can do what this says, nearly trivially, but
that just seems wrong.
I just wanted to protect any paths passed through to find in the code
below.
diff --git a/pax b/pax
index 9b7de7d..dae4555 100755
--- a/pax
+++ b/pax
@@ -78,7 +88,9 @@ if args.mode == 'write':
if args.x is None:
bsdcpio_args += ['-H', 'pax']
if len(args.args) > 0:
- find = subprocess.Popen(['find', '--'] + args.args, stdout=subprocess.PIPE)
+ find_args = ['-xdev'] if args.X else []
+ find = subprocess.Popen(['find'] + find_args + ['--'] + args.args,
+ stdout=subprocess.PIPE)
bsdcpio_stdin = find.stdout
else:
bsdcpio_stdin = None
I suppose that I could just use a list comprehension but that wouldn't
be the perfect and simplest way.
I just wanted -xdev to be unambiguously an expression, -- treated as the
options delimiter, and everything after a path.
Regards,
Alex Pilon