> > 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