Como alias parte da expressão para find?

3

Eu prefiro expressões regulares com -regex sobre a sintaxe do padrão de shell de -name . Eu também quero usar o tipo posix-egrep , então eu gostaria de fazer algo como

alias find="find -regextype posix-egrep"

mas isso é um erro, pois o caminho tem que vir antes da expressão. No entanto, o -regextype deve ser o primeiro nas expressões (ou antes de usar -regex ou -iregex ).

Eu só quero alias ou ter uma função de shell find para que ela funcione como sempre, apenas pronto para usar posix-regex sempre que eu decidir usar a opção -regex ou -iregex .

Como posso fazer isso?

    
por labyrinth 03.08.2015 / 19:54

2 respostas

5

como os argumentos find são posicionais, uma função seria uma solução melhor.

find(){
  command find "$1" -regextype posix-egrep "${@:2}"
}

desde que você deseja "sobrescrever" o comando original, você precisa usar o caminho completo de find para que sua nova função não crie um ciclo infinito de chamar a si mesmo.

usando uma função em vez de um alias, podemos usar variáveis de argumentos posicionais ( $1-$n ). uma vez que você também pode querer adicionar outras coisas ao final de seu find , adicionamos o comando com ${@:2} , que acrescenta tudo, menos o primeiro argumento (seu caminho) usando o fatiamento de matriz.

    
por 03.08.2015 / 20:01
2

Você pode fazer algo como:

efind() (
  found=false
  for arg do
    if [ "$arg" = -regex ] && ! "$found"; then
      set -- "$@" -regextype posix-egrep
      found=true
    fi
    set -- "$@" "$arg"
    shift
  done
  exec find "$@"
)

Para inserir -regex-type posix-egrep antes da primeira ocorrência de -regex .

    
por 03.08.2015 / 23:49

Tags