Skip to content

Instantly share code, notes, and snippets.

@angelbladex
Forked from guerrerocarlos/.bashrc
Last active September 29, 2025 13:01
Show Gist options
  • Save angelbladex/4999350 to your computer and use it in GitHub Desktop.
Save angelbladex/4999350 to your computer and use it in GitHub Desktop.
Un simple script en Bash para facilitar extraer contenido de algunos comprimidos -- An simple script on Bash for extract content from some compressed file
#! /bin/bash
##This can be on /bin/ or /usr/bin or any site of your $PATH
####Based on https://gist.github.com/guerrerocarlos/3977495
# Función de ayuda
show_help() {
echo "Uso: extract [OPCIONES] [ARCHIVO] [DESTINO]"
echo "Extrae archivos comprimidos de varios formatos"
echo ""
echo "Opciones:"
echo " -h, --help Muestra esta ayuda"
echo " -l, --list Lista los formatos soportados"
echo " -d, --dir Extraer en directorio con nombre del archivo"
echo ""
echo "Ejemplos:"
echo " extract \"archivo con espacios.zip\""
echo " extract \"archivo.tar.gz\" /ruta/destino"
echo " extract -d \"mi archivo.rar\""
echo " extract --list"
}
# Función para listar formatos soportados
list_formats() {
echo "Formatos soportados:"
echo "*.tar.bz2, *.tar.gz, *.tar, *.tbz2, *.tgz, *.tar.xz"
echo "*.bz2, *.rar, *.gz, *.zip, *.Z, *.7z, *.xz"
echo "*.arj, *.jar, *.deb"
}
# Variables por defecto
AUTO_DIR=false
# Procesar opciones
while [[ $# -gt 0 ]]; do
case $1 in
-h|--help)
show_help
exit 0
;;
-l|--list)
list_formats
exit 0
;;
-d|--dir)
AUTO_DIR=true
shift
;;
-*)
echo "Error: Opción desconocida '$1'"
show_help
exit 1
;;
*)
break
;;
esac
done
# Verificar archivo de entrada
if [[ $# -eq 0 ]]; then
echo "Error: No se especificó archivo"
echo "Usa 'extract --help' para más información"
exit 1
fi
FILE="$1"
DEST_DIR="${2:-.}" # Usar directorio actual si no se especifica destino
# Si se usa -d, crear directorio con nombre del archivo (sin extensión)
if [[ "$AUTO_DIR" == true ]]; then
filename=$(basename "$FILE")
DEST_DIR="./${filename%.*}"
fi
# Verificar si el archivo existe
if [[ ! -f "$FILE" ]]; then
echo "Error: '$FILE' no existe o no es un archivo regular"
exit 1
fi
# Verificar si el directorio destino existe, si no crearlo
if [[ ! -d "$DEST_DIR" ]]; then
echo "Creando directorio destino: $DEST_DIR"
mkdir -p "$DEST_DIR"
fi
# Función para verificar dependencias
check_dependency() {
if ! command -v "$1" &> /dev/null; then
echo "Error: '$1' no está instalado. Es necesario para extraer $2"
return 1
fi
return 0
}
# Extracción basada en extensión
echo "Extrayendo: $FILE"
echo "Destino: $DEST_DIR"
case "$FILE" in
*.tar.bz2|*.tbz2)
check_dependency tar "archivos .tar.bz2" && tar xvjf "$FILE" -C "$DEST_DIR" ;;
*.tar.gz|*.tgz)
check_dependency tar "archivos .tar.gz" && tar xvzf "$FILE" -C "$DEST_DIR" ;;
*.tar.xz)
check_dependency tar "archivos .tar.xz" && tar xvf "$FILE" -C "$DEST_DIR" ;;
*.tar)
check_dependency tar "archivos .tar" && tar xvf "$FILE" -C "$DEST_DIR" ;;
*.bz2)
check_dependency bunzip2 "archivos .bz2" && bunzip2 -k "$FILE" ;;
*.rar)
check_dependency unrar "archivos .rar" && unrar x "$FILE" "$DEST_DIR/" ;;
*.gz)
check_dependency gunzip "archivos .gz" && gunzip -k "$FILE" ;;
*.zip)
check_dependency unzip "archivos .zip" && unzip "$FILE" -d "$DEST_DIR" ;;
*.Z)
check_dependency uncompress "archivos .Z" && uncompress -k "$FILE" ;;
*.7z)
check_dependency 7z "archivos .7z" && 7z x "$FILE" -o"$DEST_DIR" ;;
*.xz)
check_dependency unxz "archivos .xz" && unxz -k "$FILE" ;;
*.arj)
check_dependency arj "archivos .arj" && arj e "$FILE" "$DEST_DIR/" ;;
*.jar)
check_dependency jar "archivos .jar" && jar xf "$FILE" -C "$DEST_DIR" ;;
*.deb)
check_dependency ar "archivos .deb" && ar x "$FILE" --output="$DEST_DIR" ;;
*)
echo "Formato no soportado: '$FILE'"
echo "Usa 'extract --list' para ver formatos soportados"
exit 1
;;
esac
# Verificar si la extracción fue exitosa
if [[ $? -eq 0 ]]; then
echo "✓ Extracción completada en: $DEST_DIR"
else
echo "✗ Error en la extracción"
exit 1
fi
@angelbladex
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment