unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* counsel-dired-jump error "find: paths must precede expression:"
@ 2018-01-18  2:39 John Magolske
  2018-01-18  6:46 ` Yuri Khan
  0 siblings, 1 reply; 6+ messages in thread
From: John Magolske @ 2018-01-18  2:39 UTC (permalink / raw)
  To: help-gnu-emacs

When issuing the command counsel-dired-jump from some directories I'll
get this error message:

    find: paths must precede expression: A1
    Try 'find --help' for more information.

yet from other directories the command works fine, allowing fuzzy
searching for a directory to open dired at. I can't sort out why
this error message comes up in some directories and not others...

TIA for any clues,

John

-- 
John Magolske
http://b79.net/contact



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: counsel-dired-jump error "find: paths must precede expression:"
  2018-01-18  2:39 counsel-dired-jump error "find: paths must precede expression:" John Magolske
@ 2018-01-18  6:46 ` Yuri Khan
  2018-01-19  8:13   ` John Magolske
  0 siblings, 1 reply; 6+ messages in thread
From: Yuri Khan @ 2018-01-18  6:46 UTC (permalink / raw)
  To: John Magolske; +Cc: help-gnu-emacs

On Thu, Jan 18, 2018 at 9:39 AM, John Magolske <listmail@b79.net> wrote:
> When issuing the command counsel-dired-jump from some directories I'll
> get this error message:
>
>     find: paths must precede expression: A1
>     Try 'find --help' for more information.
>
> yet from other directories the command works fine, allowing fuzzy
> searching for a directory to open dired at. I can't sort out why
> this error message comes up in some directories and not others...

The source of ‘counsel-dired-jump’:

https://github.com/abo-abo/swiper/blob/master/counsel.el#L2183

contains this expression:

    (shell-command-to-string
      (concat find-program " * -type d -not -path '*\/.git*'"))

The * in the first argument will be expanded by the shell to a list of
all files in the current directory, in unspecified order. If any of
them happens to look like a ‘find’ option, ‘find’ will try to
interpret it as one, with unintended consequences.

For example, on my system the following example breaks with the
message you quoted:

    ~$ mkdir /tmp/foo
    ~$ cd /tmp/foo
    /tmp/foo$ touch -- ! A1
    /tmp/foo$ echo *
    !  A1
    /tmp/foo$ find * -type d -not -path '*/.git*'
    find: paths must precede expression: A1

I was also able to cause data loss:

    ~$ mkdir /tmp/bar
    ~$ cd /tmp/bar
    /tmp/bar$ touch -- aaa bbb ccc -delete
    /tmp/bar$ ls
    aaa  bbb  ccc  -delete
    /tmp/bar$ find * -type d -not -path '*/.git*'
    /tmp/bar$ ls
    -delete



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: counsel-dired-jump error "find: paths must precede expression:"
  2018-01-18  6:46 ` Yuri Khan
@ 2018-01-19  8:13   ` John Magolske
  2018-01-19  9:47     ` Robert Pluim
  2018-01-19 10:07     ` Eli Zaretskii
  0 siblings, 2 replies; 6+ messages in thread
From: John Magolske @ 2018-01-19  8:13 UTC (permalink / raw)
  To: help-gnu-emacs

Thanks for the clarifying explanation,

* Yuri Khan <yuri.v.khan@gmail.com> [180117 23:14]:
> The source of ‘counsel-dired-jump’:
> 
> https://github.com/abo-abo/swiper/blob/master/counsel.el#L2183
> 
> contains this expression:
> 
>     (shell-command-to-string
>       (concat find-program " * -type d -not -path '*\/.git*'"))
> 
> The * in the first argument will be expanded by the shell to a list of
> all files in the current directory, in unspecified order. If any of
> them happens to look like a ‘find’ option, ‘find’ will try to
> interpret it as one, with unintended consequences.

looking into this further, I found a quoted wildcard resolves the issue:

    (shell-command-to-string
     (concat find-program " -path './*' -type d -not -path '*\/.git*'"))

Seems to behave pretty much the same, except that all the directory
file-paths displayed in the minibuffer are now preceded with a ./

> [...]
>
> I was also able to cause data loss:
> 
>     ~$ mkdir /tmp/bar
>     ~$ cd /tmp/bar
>     /tmp/bar$ touch -- aaa bbb ccc -delete
>     /tmp/bar$ ls
>     aaa  bbb  ccc  -delete
>     /tmp/bar$ find * -type d -not -path '*/.git*'
>     /tmp/bar$ ls
>     -delete


-- 
John Magolske
http://b79.net/contact



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: counsel-dired-jump error "find: paths must precede expression:"
  2018-01-19  8:13   ` John Magolske
@ 2018-01-19  9:47     ` Robert Pluim
  2018-01-19 10:11       ` tomas
  2018-01-19 10:07     ` Eli Zaretskii
  1 sibling, 1 reply; 6+ messages in thread
From: Robert Pluim @ 2018-01-19  9:47 UTC (permalink / raw)
  To: John Magolske; +Cc: help-gnu-emacs

John Magolske <listmail@b79.net> writes:

> looking into this further, I found a quoted wildcard resolves the issue:
>
>     (shell-command-to-string
>      (concat find-program " -path './*' -type d -not -path '*\/.git*'"))
>
> Seems to behave pretty much the same, except that all the directory
> file-paths displayed in the minibuffer are now preceded with a ./

What's wrong with using "find ." instead of "find './*'"?

Robert



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: counsel-dired-jump error "find: paths must precede expression:"
  2018-01-19  8:13   ` John Magolske
  2018-01-19  9:47     ` Robert Pluim
@ 2018-01-19 10:07     ` Eli Zaretskii
  1 sibling, 0 replies; 6+ messages in thread
From: Eli Zaretskii @ 2018-01-19 10:07 UTC (permalink / raw)
  To: help-gnu-emacs

> Date: Fri, 19 Jan 2018 00:13:02 -0800
> From: John Magolske <listmail@b79.net>
> 
> > https://github.com/abo-abo/swiper/blob/master/counsel.el#L2183
> > 
> > contains this expression:
> > 
> >     (shell-command-to-string
> >       (concat find-program " * -type d -not -path '*\/.git*'"))
> > 
> > The * in the first argument will be expanded by the shell to a list of
> > all files in the current directory, in unspecified order. If any of
> > them happens to look like a ‘find’ option, ‘find’ will try to
> > interpret it as one, with unintended consequences.
> 
> looking into this further, I found a quoted wildcard resolves the issue:
> 
>     (shell-command-to-string
>      (concat find-program " -path './*' -type d -not -path '*\/.git*'"))

Beware: this uses quoting that will fail on non-Posix hosts.  For
portable code, always use shell-quote-argument instead of literal
quotes and backslash-escapes.



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: counsel-dired-jump error "find: paths must precede expression:"
  2018-01-19  9:47     ` Robert Pluim
@ 2018-01-19 10:11       ` tomas
  0 siblings, 0 replies; 6+ messages in thread
From: tomas @ 2018-01-19 10:11 UTC (permalink / raw)
  To: help-gnu-emacs

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Fri, Jan 19, 2018 at 10:47:35AM +0100, Robert Pluim wrote:
> John Magolske <listmail@b79.net> writes:
> 
> > looking into this further, I found a quoted wildcard resolves the issue:
> >
> >     (shell-command-to-string
> >      (concat find-program " -path './*' -type d -not -path '*\/.git*'"))
> >
> > Seems to behave pretty much the same, except that all the directory
> > file-paths displayed in the minibuffer are now preceded with a ./
> 
> What's wrong with using "find ." instead of "find './*'"?

They are at least different: I don't know whether that is relevant here.

With "find .", the start set is the current directory; it would also
find files and subdirs of "." whose name starts with a dot.

With "find ./*", the shell would have a go at expanding ./* into
the list of entries of the current directory: find's start set would
be that list, as expanded by the shell. By default[1], that expansion
excludes entries whose name start with a dot (thus the -not -path ...
up there seems superfluous).

Cheers

[1] But cf "shopt dotglob" for bash, for example. Shells tend to
   vary in this department. Note that the shell expansion of
   ./* can vary even more wildly, cf. bash's "set noglob".
- -- tomás
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)

iEYEARECAAYFAlphxDsACgkQBcgs9XrR2kaGJwCfY+3Jf3ScGiLDVnY0nyUtdaMd
MfMAn2zVmOgsALLgwoCQwzSwR0syWYwc
=2ZOs
-----END PGP SIGNATURE-----



^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2018-01-19 10:11 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-01-18  2:39 counsel-dired-jump error "find: paths must precede expression:" John Magolske
2018-01-18  6:46 ` Yuri Khan
2018-01-19  8:13   ` John Magolske
2018-01-19  9:47     ` Robert Pluim
2018-01-19 10:11       ` tomas
2018-01-19 10:07     ` Eli Zaretskii

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).