Produtividade no terminal: take, coppy, gitc, lsgit e exa

Produtividade no terminal: take, coppy, gitc, lsgit e exa
Produtividade no terminal: take, coppy, gitc, lsgit e exa

Pequenas funções shell podem economizar horas de cliques e digitação.
A seguir mostro quatro que uso diariamente – todas salvas no meu .zshrc/.bashrc – e por que elas deixam o fluxo de trabalho muito mais rápido.

1. take — crie o diretório e já entre nele

# create directories and enter
function take {
    mkdir -p "$1"
    cd "$1"
}
  • Quando usar: sempre que precisar começar um projeto ou pasta nova.
  • Vantagem: elimina os dois passos separados (mkdir + cd).
  • Na prática:
take projeto-novo        # cria ./projeto-novo e já entra nele

2. coppy — copie tudo (inclusive arquivos ocultos) para outro diretório.

# copy all files on folder to another folder
function coppy {
    if [ -z "$1" ]; then
        echo "How use: coppy <destination_directory>"
        return 1
    fi
    cp -R ./.* "$1" 2>/dev/null   # .git, .env, etc.
    cp -R ./*  "$1"
}
  • Quando usar: clonar rapidamente a estrutura de um projeto para outro lugar ou criar um backup local.
  • Por que é melhor: inclui arquivos ocultos (.*) que você normalmente esquece no cp -R *.
coppy ../backup-projeto/

Esse comando copia todos os arquivos da pasta atual, incluindo os ocultos, para ../backup-projeto/.

3. gitcadd, commit e push em um único comando inteligente.

gitc() {
    if [ -z "$1" ]; then
        echo "Error: Please provide a commit message."
        return 1
    fi

    auto_confirm=false
    if [[ "$3" == "-y" ]]; then
        auto_confirm=true
    fi

    if [ -z "$2" ]; then
        current_branch=$(git rev-parse --abbrev-ref HEAD)
        echo "Detected current branch: $current_branch"
        if [ "$auto_confirm" = false ]; then
            read "confirm?Do you want to use this branch? [y/N]: "
            [[ "$confirm" != [yY]* ]] && echo "Operation canceled." && return 1
        fi
        branch="$current_branch"
    else
        branch="$2"
    fi

    git add .
    git commit -m "$1"
    git push origin "$branch"
}
  • Fluxo simplificado:
  1. gitc "Mensagem do commit" → detecta a branch atual, confirma e faz tudo.
  2. gitc "Fix: typo" hotfix → usa branch explicitamente.
  3. gitc "WIP" "" -y → pula a confirmação (-y).
  • Produtividade: menos comandos, menos chance de esquecer o push.

4. lsgit — encontre repositórios “sujos” com exa.

alias lsgit='for d in */; do \
  if [ -d "$d/.git" ]; then \
    cd "$d"; \
    if git status --porcelain | grep . >/dev/null; then \
      cd ..; \
      printf "\033[31m[?]\033[0m "; \
      exa -ld --icons "$d"; \
    else \
      cd ..; \
    fi; \
  fi; \
done'
  • O que faz: percorre todas as pastas do diretório atual, identifica quais são repositórios Git e têm alterações não-commitadas.
  • Por que uso exa: além de colorir, ele mostra ícones e permissões de forma clara (exa -ld --icons).
  • Como fica:
[?] drwxr-xr-x  app-teste/
[?] drwxr-xr-x  landing-page/

Qualquer pasta marcada com [?] precisa de atenção antes de um git push global ou de criar uma release.

Instalando & salvando as funções

  1. Abra seu editor favorito e edite ~/.zshrc ou ~/.bashrc.
  2. Cole todas as funções e alias acima.
  3. Salve o arquivo e recarregue o shell:
source ~/.zshrc   # ou ~/.bashrc

Instalando o exa (caso ainda não tenha)

# Arch Linux
sudo pacman -S exa

# Ubuntu / Debian
sudo apt install exa

# macOS (Homebrew)
/bin/bash -c "$(brew install exa)"

Benefícios práticos que percebo no dia a dia

RotinaAntesDepois
Criar projetomkdir pasta && cd pastatake pasta
Copiar estrutura2 comandos cp (geral + ocultos)coppy destino/
Commit rápidogit add . && git commit -m "msg" && git pushgitc "msg"
Verificar repositórios pendentesmanual, pasta por pastalsgit instantâneo

Pequenos scripts no shell são multiplicadores de tempo. Ao combinar take, coppy, gitc e lsgit com o poder visual do exa, você:

  • Automatiza tarefas repetitivas.
  • Mantém seus repositórios limpos.
  • Evita esquecer arquivos ocultos ou pushes.
  • Ganha segundos preciosos em cada fluxo, que viram horas no mês.