Use o comando 'mv' para mover arquivos, exceto aqueles em um diretório específico

1

No Linux, conheço o comando mv !(folder1|folder2) folder1se quero mover todos os arquivos da pasta atual, exceto folder1 e folder2, e movê-los folder1. Mas estes recomendam, não funciona no terminal mac!

Onde está o comando equivalente no mac?

The33Coder
fonte
2
Eu estou assumindo que seu shell é uma festança. Ative o estendido glob-shopt -s extglob
fd0

Respostas:

6

Parece que a versão do bash nas versões recentes do macOS é um pouco mais antiga do que você encontrará em algumas novas distribuições de Linux. Vejo a versão 3.2.57 no macOS High Sierra e Mojave e a versão 4.2.46 no RedHat Enterprise Linux 7.

Aqui está uma sintaxe que você pode usar para excluir os diretórios, conforme especificado:

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

E o mais interessante é que a sintaxe acima deve funcionar no bash no macOS e no Linux.

jefe2000
fonte
11
O MacOS versão bash é o mais recente sob a GPL versão 2
Mark
Existe uma abordagem mais simples para lembrar? no zsh também é bom!
The33Coder
Você quer dizer "existe uma sintaxe mais simples" ou "você pode explicar a sintaxe acima para facilitar a lembrança"? Não sei ao certo o que você está
procurando
Eu quis dizer "existe uma sintaxe mais simples". A sintaxe no linux é mais legível quando usada. É ^dir1dir2que não acho prático.
The33Coder
OK, acho que existem algumas opções imediatas. 1. Use o shopt -s extglob, como recomendado acima em @ fd0, para usar sua sintaxe original. 2. Pense no caractere '^' como significando que não , assim como o '!' caractere em sua sintaxe original. Com isso em mente, os dois tipos de sintaxe são bastante semelhantes.
jefe2000