A melhor maneira de ver a documentação do zsh é usando info .
Se você executar info zsh , você pode usar o índice (pense em um índice do livro ) para localizar a seção que descreve o comando zmodload .
Pressione i , então você pode inserir zmo e pressionar a tecla Tab . Você vai direto para a descrição de zmodload que lhe contará tudo sobre isso.
Em suma, zmodload -F carrega o módulo (se não carregado) e ativa somente os recursos especificados desse módulo.
Com -m , ativamos os recursos que m atingem um padrão, aqui b:zf_* . b: é para builtin, portanto, o comando acima carrega o módulo zsh/files (consulte info -f zsh -n 'The zsh/files Module,' para obter detalhes sobre isso) e ativa somente os construtores cujo nome começa com zf_ .
zmodload -F zsh/files
carrega o módulo, mas não ativa nenhum recurso:
$ zmodload -FlL zsh/files
zmodload -F zsh/files -b:chgrp -b:chown -b:ln -b:mkdir -b:mv -b:rm -b:rmdir -b:sync -b:zf_chgrp -b:zf_chown -b:zf_ln -b:zf_mkdir -b:zf_mv -b:zf_rm -b:zf_rmdir -b:zf_sync
lista os recursos desse módulo especificando quais estão atualmente ativados (nenhum por enquanto). Você notará que há um mv e zf_mv incorporado.
$ zmodload -mF zsh/files 'b:zf_*'
$ zmodload -FlL zsh/files
zmodload -F zsh/files -b:chgrp -b:chown -b:ln -b:mkdir -b:mv -b:rm -b:rmdir -b:sync +b:zf_chgrp +b:zf_chown +b:zf_ln +b:zf_mkdir +b:zf_mv +b:zf_rm +b:zf_rmdir +b:zf_sync
Você notará que o zf_mv builtin foi ativado, mas não o mv one (o mesmo para os outros arquivos incorporados). Isso significa que as versões embutidas dos comandos do sistema foram ativadas, mas sem substituir o sistema:
$ type zf_mv
zf_mv is a shell builtin
$ type mv
mv is /bin/mv
Agora que você tem um mv embutido, como zf_mv , não mv , você pode fazer:
zf_mv -- ^*.(jpg|png|bmp) targetdir/
Como zf_mv está embutido, não há nenhuma chamada de sistema execve() , portanto você não atingirá o limite Too many args associado a ele.
Claro, você também pode fazer:
zmodload zsh/files # without -F, all the features are enabled
mv -- ^*.(jpg|png|bmp) targetdir/
Mas cuidado, pois isso substitui o mv do sistema por zsh do equivalente incorporado.
Para superar o erro E2BIG execve() (o Too many args ao executar um comando externo), zsh também fornece uma função zargs .
Você executa:
autoload zargs # in ~/.zshrc if you use it often
Para marcá-lo para o carregamento automático.
Então você pode usar:
zargs -- ^*.(jpg|png|bmp) -- mv -t targetdir/
(assumindo aqui o GNU mv para a opção -t ). zargs executará quantos comandos mv forem necessários para evitar o E2BIG (como xargs faria).