1

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 '18 at 22:20
6

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 – Mark Dec 21 '18 at 22:40
  • Is there a more simple approach to remember it? in zsh it's also good! – The33Coder Dec 22 '18 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 '18 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 '18 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 '18 at 18:31

You must log in to answer this question.

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