Um comando não tem como saber quais curingas foram expandidos para compor seus argumentos.
Em zsh, você pode adicionar o modificador noglob
na frente de um comando para impedir a expansão de curingas. Isso permite que você defina um wrapper que rejeite a chamada, se o último argumento contiver caracteres curinga.
mv_check_last_argument () {
local last
setopt local_options null_glob
last=(${~${(P)#}})
if [[ $#last -eq 1 && $last[1] = ${(P)#} ]]; then
command mv $~@[@]
else
echo 1>&2 "Not running mv because '${(P)#}' is a wildcard pattern"
return 125
fi
}
alias mv='noglob mv_check_last_argument'
(Aviso: código não testado)
Isso, obviamente, priva a capacidade de usar curingas quando você pretende corresponder a um único diretório de destino, mas isso geralmente não é muito útil, porque você pode usar a conclusão. Quando você quiser usar curingas, use \mv …
com uma barra invertida para suprimir o alias.
Erros com mv
são fáceis de desfazer, a menos que você tenha sobrescrito um arquivo de destino existente. Para evitar sobrescrever o arquivo de destino, há uma maneira fácil: execute mv -i
em vez de mv
. Dessa forma, mv
apenas faz o trabalho de mover um arquivo e avisa se ele teria que fazer o trabalho adicional de remover um arquivo. Novamente, use \mv …
para pular o alias e sobrescrever incondicionalmente o destino, se já existir.
alias cp='cp -i' mv='mv -i'