No probado, verifique la versión original en inglés para el uso real, que ha sido probado.
#!/bin/bash
#| Por u/alexbarbershop, más información en ❤️
#|sites.google.com/view/gatajos ⬅︎ ⬇︎ ←
#|Donar: PayPal.com/donate/?hosted_button_id=K8VC9LKWFDV6U
#|o a direcciones BTC/XMR/ETH/LTC después de script+ en mi sitio ↖︎
#| No afiliado a Catbox LLC|#
#|pero puedes apoyar el alojamiento gratuito|#
#|en catbox.moe/support.php|#
#|Utiliza código del sistema operativo escrito por|#
#|Bartłomiej Skoczeń y publicado|#
#| en git:MineBartekSA/catbox |#
#|con una licencia de uso libre del MIT|#
#|Mi código se publica de forma similarmente|#
#| una licencia Creative Commons CC0
#|clots_slipped.5s@icloud.com|#
# --- Configuración --- #
input_file_path="Entrada de acceso directo (Ruta del archivo)" # Ruta de ejemplo
log_file="/tmp/icloud_litterbox_script.log"
upload_type="Tipo de carga"
# --- Función para obtener el tamaño del archivo --- #
get_file_size() {
stat -f%z "$1" 2>/dev/null || echo 0
}
# --- Función de subida de Catbox (usando copia de archivo temporal con nombre simplificado) --- #
upload_from_local_copy() {
local source_file_path="$1" # Esta ruta *debe* apuntar a un archivo local y legible
local upload_type="$2"
# Verificar que el archivo fuente sea legible antes de continuar
if [[ ! -f "$source_file_path" ]]; then
echo "Error: La función de subida recibió una ruta de archivo inexistente: '$source_file_path'" >> "$log_file"
return 1
fi
if [[ ! -r "$source_file_path" ]]; entonces
echo "Error: La función de subida recibió una ruta de archivo ilegible: '$source_file_path'" >> "$log_file"
echo "Intentando añadir permiso de lectura al archivo: '$source_file_path'" >> "$log_file"
chmod +r "$source_file_path" 2>/dev/null
if [[ ! -r "$source_file_path" ]]; then
echo "Error: Aún no se puede leer el archivo tras intentar chmod: '$source_file_path'" >> "$log_file"
return 1
else
echo "Permiso de lectura añadido correctamente al archivo: '$source_file_path'" >> "$log_file"
fi
fi
# Simplificar el nombre de archivo para la copia temporal y para la parte 'filename=' de curl
local original_basename=$(basename "$source_file_path")
local file_extension="${original_basename##*.}"
local base_name_without_ext="${original_basename%.*}"
# Eliminar caracteres problemáticos y reemplazarlos con guiones bajos
local simplified_basename=$(echo "$base_name_without_ext" | sed -E 's/[^a-zA-Z0-9._-]/_/g' | sed -E 's/_+/_/g' | sed -E 's/^_//;s/_$//')
if [ -z "$nombre_base_simplificado" ]; then
nombre_base_simplificado="archivo_cargado"
fi
localnombre_archivo_cargado="${nombre_base_simplificado}.${extensión_archivo}"
# Crear un archivo temporal con el nombre simplificado en /tmp/
localtemp_file_path=$(mktemp "/tmp/${nombre_base_simplificado}_XXXXXX.${extensión_archivo}")
echo "Copiando archivo local '$ruta_archivo_origen' al archivo temporal '$ruta_archivo_temp'" >> "$archivo_registro"
/usr/bin/ditto "$ruta_archivo_origen" "$ruta_archivo_temp"
localditto_exit_code=$?
if [ "$ditto_exit_code" -ne 0 ]; entonces
echo "Error: No se pudo copiar el archivo a la ubicación temporal usando ditto. Código de salida de ditto: $ditto_exit_code" >> "$log_file"
rm -f "$temp_file_path" # Limpiar archivo temporal
return 1
fi
echo "Archivo copiado correctamente a la ruta temporal: '$temp_file_path'" >> "$log_file"
echo "Usando nombre de archivo simplificado para la carga: '$upload_filename'" >> "$log_file"
if [[ "$upload_type" == "temp" ]]; entonces
url="https://litterbox.catbox.moe/resources/internals/api.php"
form_args=( -F "reqtype=fileupload" -F "time=Litterbox Expiration")
de lo contrario
url="https://catbox.moe/user/api.php"
form_args=( -F "reqtype=fileupload")
fi
# Usar la ruta del archivo temporal y el nombre de archivo simplificado para curl
curl_command="/usr/bin/curl -s ${form_args[@]} -F \"fileToUpload=@$temp_file_path;filename=$upload_filename\" \"$url\""
echo "Ejecutando comando curl en el archivo temporal: $curl_command" >> "$log_file"
local temp_output_file=$(mktemp)
eval "$curl_command" > "$temp_output_file" 2>&1
local curl_exit_code=$?
output=$(cat "$temp_output_file")
rm "$temp_output_file"
rm -f "$temp_file_path" # Limpiar el archivo temporal tras el intento de carga
if [ "$curl_exit_code" -ne 0 ]; then
echo "El comando Curl falló con el código de salida $curl_exit_code." >> "$log_file"
echo "Salida de Curl (detalle del error): $output" >> "$log_file"
fi
echo "$output"
return "$curl_exit_code"
}
echo "--- Iniciando el script de descarga de iCloud y subida de Catbox ($(date)) ---" > "$log_file"
echo "Ruta del archivo de entrada: $input_file_path" >> "$log_file"
# Comprobar si la ruta del archivo original existe
if ! test -f "$input_file_path"; then
echo "Error: El archivo no existe en $input_file_path." >> "$log_file"
exit 1
fi
final_upload_successful=false # Indicador de éxito general
final_output=""
final_catbox_exit_code=1
local_file_for_upload="$input_file_path" # Esta será la ruta utilizada para la función de carga
brctl_exit_code=1 # Inicializar brctl_exit_code fuera del bloque so es accesible
# --- Intentar descargar brctl primero, suprimiendo su salida ---
echo "Intentando descargar brctl (suprimiendo salida)..." >> "$log_file"
brctl_output=$(/usr/bin/brctl download "$input_file_path" 2>&1) # Capturar la salida estándar y la salida estándar
brctl_exit_code=$? # Capturar el código de salida inmediatamente después de la ejecución
# Verificar el código de salida de brctl y la salida capturada para detectar un error específico
if [ "$brctl_exit_code" -eq 0 ]; then
echo "El comando de descarga brctl se emitió correctamente. Se asume un archivo de iCloud, esperando su finalización..." >> "$log_file"
local max_wait=45 # Tiempo de espera aumentado para la descarga y la sincronización
local elapsed=0
while [ $elapsed -lt $max_wait ]; hacer
tamaño local=$(get_file_size "$input_file_path")
si [ "$tamaño" -gt 0 ] && !find "$input_file_path" -name "*.icloud" -maxdepth 0 -print -quit 2>/dev/null; entonces
echo "El archivo parece descargado (tamaño=$tamaño) y el sufijo se ha eliminado." >> "$archivo_de_registro"
pausa
fi
dormir 1
transcurrido=$((transcurrido + 1))
hecho
dormir 2 # Pequeña espera final
si find "$input_file_path" -name "*.icloud" -maxdepth 0 -print -quit 2>/dev/null; entonces
echo "Advertencia: El sufijo del marcador de posición de iCloud sigue presente después de los intentos de descarga." >> "$archivo_de_registro"
echo "Continuando con el intento de carga de todos modos, pero podría fallar si no se descarga completamente." >> "$log_file"
else
echo "El sufijo del marcador de posición de iCloud parece eliminado o nunca estuvo presente." >> "$log_file"
fi
# Ahora que el archivo de iCloud debería ser local, intenta subirlo.
echo "Intentando subir desde un archivo de iCloud (ahora local)." >> "$log_file"
final_output=$(upload_from_local_copy "$local_file_for_upload" "$upload_type")
final_catbox_exit_code=$?
if [ "$final_catbox_exit_code" -eq 0 ]; then
final_upload_successful=true
fi
elif
echo "$brctl_output" | grep -q "Error Domain=BRCloudDocsErrorDomain Code=6"; then
echo "Error en la descarga de brctl, probablemente porque la ruta está fuera del área administrada de iCloud. ($brctl_output)" >> "$log_file"
echo "Suponiendo que el archivo no es de iCloud (local). Intentando subirlo directamente." >> "$log_file"
# Es un archivo que no es de iCloud, intenta subirlo directamente.
final_output=$(upload_from_local_copy "$local_file_for_upload" "$upload_type")
final_catbox_exit_code=$?
if [ "$final_catbox_exit_code" -eq 0 ]; then
final_upload_successful=true
fi
else
echo "Error inesperado en el comando de descarga de brctl. ($brctl_output)" >> "$log_file"
echo "No se puede continuar con la subida." >> "$log_file"
# brctl falló por una razón desconocida; se asume que es irrecuperable y el script se cerrará como error.
fi
# Manejo de la salida y el estado final
if [ "$final_upload_successful" = true ]; then
echo "--- Salida de Catbox sin procesar (Resultado final) ---" >> "$log_file"
echo "$final_output" >> "$log_file"
echo "-------------------------------------------" >> "$log_file"
echo "Código de salida de Catbox-cli (Resultado final): $final_catbox_exit_code" >> "$log_file"
if [ "$final_catbox_exit_code" -eq 0 ]; then
url=$(echo "$final_output" | grep -Eo "https://[^ ]+\.catbox\.moe/[^ ]+" | tail -n 1)
if [ -n "$url" ]; entonces
echo "URL extraída correctamente: $url" >> "$archivo_registro"
echo "$url"
de lo contrario
echo "Error: No se pudo extraer la URL de la salida de catbox-cli. La salida indica éxito, pero no la URL o contenía un error." >> "$archivo_registro"
echo "$salida_final"
salida 1
fi
de lo contrario
echo "Error: Error al cargar con Catbox con el código de salida $final_catbox_exit_code." >> "$archivo_registro"
echo "$salida_final"
salida 1
fi
de lo contrario
echo "El script general no pudo cargar el archivo." >> "$archivo_registro"
echo "$salida_final"
salida 1
fi
echo "--- Fin del script ($(fecha)) ---" >> "$archivo_registro"
#| --- COMIENZA LA SECCIÓN DE INICIO DE PGP GRATUITA ---
#| por u/alexbarbershop, más información en
#| sites.google.com/view/shortcats
#|Donar: PayPal.com/donate/?hosted_button_id=K8VC9LKWFDV6U
#| Unos Satoshis para que me sienta mejor con los 37 que tenía cuando costaban menos que un McDouble.
#| BTC: bc1qajz4zcarstnzm5sh5c70e43l9zd49ug45yr3g3
#| ETH: 0xCEdF024875457c660b1eBC5f0af86Ae227164855
#|XMR: 48qMQo4aUoH1XmaNSCowmo35c4qpUm5Jp9uN1BFQccB5dDUBD1P5txiK5fWn8U5q7HD37iwY9d1Dn9T5NuZWV2nrFGWPudb
#| Fue algo hermoso, antes de D.O.G.E.
#| Pero puedes ayudarme a conservar la moneda de los LITes (:
#| LTC: ltc1q5xavwp3p4m2kwewvawupzjh93f5taccxlavjm0
#| --- FIN DE PGP BEG ---
#|nadaqueveraquí, amigos
#☭☭☭SUBVERSIVO☭☭☭☭☭OCULTO☭☭U
#☭#☭##☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭N
#☭#☭##☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭I
#☭#☭##☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭C
#☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭O
#☭☭☭☭☭ ☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭D
#☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭E
#BLOQUE☭DE☭TEXTO☭COMUNISTA☭☭
🥹 Envía algo de lavado de dinero o... (deja al pájaro en el porche)
BTC: bc1qajz4zcarstnzm5sh5c70e43l9zd49ug45yr3g3
XMR: 48qMQo4aUoH1XmaNSCowmo35c4qpUm5Jp9uN1BFQccB5dDUBD1P5txiK5fWn8U5q7HD37iwY9d1Dn9T5NuZWV2nrFGWPudb
LTC: ltc1q5xavwp3p4m2kwewvawupzjh93f5taccxlavjm0
ETHER: 0xCEdF024875457c660b1eBC5f0af86Ae227164855
DOGE: Descanse en paz a la gran memecoin, deD por eLoN TrUkc.