In Linux, I know the command mv !(folder1|folder2) folder1 if I want to move all files in current folder, excepted folder1 and folder2, and move they in folder1. But these commend, doesn't work in mac terminal!

Where is the equivalent command in mac?

  • 2
    I'm assuming that your shell is bash. Turn on extended glob- shopt -s extglob
    – fd0
    Dec 21, 2018 at 22:20

1 Answer 1


Looks like the version of bash on recent versions of macOS is a bit older than you'll find on some new Linux distros. I see version 3.2.57 on macOS High Sierra and Mojave and version 4.2.46 on RedHat Enterprise Linux 7.

Here's some syntax you can use to exclude the directories, as you've specified:

# move everything but dir1 & dir2 into dir1
mv *[^dir1dir2]* dir1

And, the nice thing is, the syntax above ought to work in bash on both macOS and Linux.

  • 1
    The Macos bash version is the latest under GPL version 2
    – mmmmmm
    Dec 21, 2018 at 22:40
  • Is there a more simple approach to remember it? in zsh it's also good!
    – The33Coder
    Dec 22, 2018 at 17:28
  • Do you mean, "is there simpler syntax" or "can you explain the syntax above so that it's easy to remember"? I'm not sure which you're going for…
    – jefe2000
    Dec 24, 2018 at 17:16
  • I meant "is there simpler syntax". The syntax under linux is more readable when used. It's ^dir1dir2 that I don't find practical.
    – The33Coder
    Dec 24, 2018 at 18:54
  • OK, I think there are a couple immediate options. 1. Use the shopt -s extglob, as recommended above by @fd0, to use your original syntax. 2. Think of the '^' character as meaning not, just like the '!' character in your original syntax. With that in mind, the two flavors of syntax are fairly similar.
    – jefe2000
    Dec 25, 2018 at 18:31

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .