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 nocp -R *
.
coppy ../backup-projeto/
Esse comando copia todos os arquivos da pasta atual, incluindo os ocultos, para ../backup-projeto/
.
3. gitc
— add, 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:
gitc "Mensagem do commit"
→ detecta a branch atual, confirma e faz tudo.gitc "Fix: typo" hotfix
→ usa branch explicitamente.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
- Abra seu editor favorito e edite
~/.zshrc
ou~/.bashrc
. - Cole todas as funções e alias acima.
- 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
Rotina | Antes | Depois |
---|---|---|
Criar projeto | mkdir pasta && cd pasta | take pasta |
Copiar estrutura | 2 comandos cp (geral + ocultos) | coppy destino/ |
Commit rápido | git add . && git commit -m "msg" && git push | gitc "msg" |
Verificar repositórios pendentes | manual, pasta por pasta | lsgit 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.