* is there a way to use *.{txt,zip,tbz,dmg} if one or more might be missing? @ 2019-07-07 23:27 TJ Luoma 2019-07-08 0:10 ` Bart Schaefer 0 siblings, 1 reply; 4+ messages in thread From: TJ Luoma @ 2019-07-07 23:27 UTC (permalink / raw) To: zsh-users This seems like one of those things that I might have not learned that everyone else knows, so I thought I'd ask. I can use this: mv -vn *.{txt,zip,tbz,dmg} ~/dir/ to move all files that end with zip/txt/tbz/dmg to ~/dir/ BUT it will fail if it does not find at least one file with each of those extensions. Is there a way to do basically the same thing, but tell `mv` "if is at least one file with any of these extensions, then move to ~/dir/" ? I suppose I could use `find` with various `-o` flags, but I was wondering if there was an easier way. Thanks! Tj -- TJ Luoma TJ @ MacStories Personal Website: luo.ma (aka RhymesWithDiploma.com) Twitter: @tjluoma ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: is there a way to use *.{txt,zip,tbz,dmg} if one or more might be missing? 2019-07-07 23:27 is there a way to use *.{txt,zip,tbz,dmg} if one or more might be missing? TJ Luoma @ 2019-07-08 0:10 ` Bart Schaefer 2019-07-08 10:44 ` Peter Stephenson 0 siblings, 1 reply; 4+ messages in thread From: Bart Schaefer @ 2019-07-08 0:10 UTC (permalink / raw) To: TJ Luoma; +Cc: Zsh Users On Sun, Jul 7, 2019 at 4:28 PM TJ Luoma <luomat@gmail.com> wrote: > > Is there a way to do basically the same thing, but tell `mv` "if is at > least one file with any of these extensions, then move to ~/dir/" ? Use an alternation pattern instead of brace expansion: mv -vn *.(txt|zip|tbz|dmg) ~/dir/ ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: is there a way to use *.{txt,zip,tbz,dmg} if one or more might be missing? 2019-07-08 0:10 ` Bart Schaefer @ 2019-07-08 10:44 ` Peter Stephenson 2019-07-08 12:14 ` Mikael Magnusson 0 siblings, 1 reply; 4+ messages in thread From: Peter Stephenson @ 2019-07-08 10:44 UTC (permalink / raw) To: zsh-users On Sun, 2019-07-07 at 17:10 -0700, Bart Schaefer wrote: > On Sun, Jul 7, 2019 at 4:28 PM TJ Luoma <luomat@gmail.com> wrote: > > > > > > Is there a way to do basically the same thing, but tell `mv` "if is at > > least one file with any of these extensions, then move to ~/dir/" ? > Use an alternation pattern instead of brace expansion: > > mv -vn *.(txt|zip|tbz|dmg) ~/dir/ I'm surprised to see I never added this to the FAQ. It's getting quite hard to search, though... pws diff --git a/Etc/FAQ.yo b/Etc/FAQ.yo index c4f65e97a..a8d88ec7c 100644 --- a/Etc/FAQ.yo +++ b/Etc/FAQ.yo @@ -128,6 +128,7 @@ Chapter 3: How to get various things to work 3.27. What are these `^' and `~' pattern characters, anyway? 3.28. How do I edit the input buffer in $EDITOR? 3.29. Why does `which' output for missing commands go to stdout? +3.30. Why doesn't the expansion mytt(foo.{tex,aux,pdf}) do what I expect? Chapter 4: The mysteries of completion 4.1. What is completion? @@ -1995,6 +1996,44 @@ sect(Why does `which' output for missing commands go to stdout?) the exit status does reflect the fact the command can't be found. +sect(Why doesn't the expansion mytt(*.{tex,aux,pdf}) do what I expect?) + + Based on the behaviour of some other shells, you might guess that the + following expression: + verb( + echo *.{tex,aux,pdf} + ) + would be the way to echo any files ending in mytt(.tex), mytt(.aux) or + mytt(.pdf) in the current directory. Depending on your settings for + matching (see link(2.1)(21), in particular tt(NO_NOMATCH)), you may + see something else, in particular an error about (say) mytt(*.aux) if + there were no files ending mytt(.aux). + + The reason for this is that the brace expansion isn't actually + a form of pattern matching. Instead, the line above is equivalent to + verb( + echo *.tex *.aux *.pdf + ) + giving you three separate patterns. With the default mytt(NOMATCH) + behaviour in effect, any pattern that fails to match is an error. + + However, there em(is) a way of doing exactly what you want, using + parentheses instead of braces: + verb( + echo *.(tex|aux|pdf) + ) + This is now a pattern matching expression, so is considered as a + single pattern. Now any file that exists will supress the + mytt(NOMATCH) behaviour, but you'll still get all the files that do + match. + + This use of parentheses is special to zsh. Modern Bourne-like shells + have a syntax like this, too, but with an mytt(@) in front of the + parentheses: again, see link(2.1)(21), and search for mytt(@+LPAR()). + This is harder for the user to remember but easier for the shell to + parse! + + chapter(The mysteries of completion) ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: is there a way to use *.{txt,zip,tbz,dmg} if one or more might be missing? 2019-07-08 10:44 ` Peter Stephenson @ 2019-07-08 12:14 ` Mikael Magnusson 0 siblings, 0 replies; 4+ messages in thread From: Mikael Magnusson @ 2019-07-08 12:14 UTC (permalink / raw) To: Peter Stephenson; +Cc: zsh-users On 7/8/19, Peter Stephenson <p.stephenson@samsung.com> wrote: > On Sun, 2019-07-07 at 17:10 -0700, Bart Schaefer wrote: >> On Sun, Jul 7, 2019 at 4:28 PM TJ Luoma <luomat@gmail.com> wrote: >> > >> > >> > Is there a way to do basically the same thing, but tell `mv` "if is at >> > least one file with any of these extensions, then move to ~/dir/" ? >> Use an alternation pattern instead of brace expansion: >> >> mv -vn *.(txt|zip|tbz|dmg) ~/dir/ > > I'm surprised to see I never added this to the FAQ. It's getting > quite hard to search, though... > > pws > > diff --git a/Etc/FAQ.yo b/Etc/FAQ.yo > index c4f65e97a..a8d88ec7c 100644 > --- a/Etc/FAQ.yo > +++ b/Etc/FAQ.yo > @@ -128,6 +128,7 @@ Chapter 3: How to get various things to work > 3.27. What are these `^' and `~' pattern characters, anyway? > 3.28. How do I edit the input buffer in $EDITOR? > 3.29. Why does `which' output for missing commands go to stdout? > +3.30. Why doesn't the expansion mytt(foo.{tex,aux,pdf}) do what I expect? This part should probably say * too, not foo. -- Mikael Magnusson ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2019-07-08 12:15 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2019-07-07 23:27 is there a way to use *.{txt,zip,tbz,dmg} if one or more might be missing? TJ Luoma 2019-07-08 0:10 ` Bart Schaefer 2019-07-08 10:44 ` Peter Stephenson 2019-07-08 12:14 ` Mikael Magnusson
Code repositories for project(s) associated with this public inbox https://git.vuxu.org/mirror/zsh/ 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 NNTP newsgroup(s).