-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
You can use too dtrx http://www.tecmint.com/dtrx-an-intelligent-archive-extraction-tar-zip-cpio-rpm-deb-rar-tool-for-linux/