Failų įkėlimo scenarijus į file.io naudojant Bash ir cURL

 



Šiame įraše apžvelgsiu paprastą Bash scenarijų, kuris leidžia patogiai įkelti failus į “file.io“ platformą. Scenarijus naudoja cURL įrankį failo siuntimui ir jq įrankį JSON atsakymui apdoroti.


#!/usr/bin/env bash
# Funkcija patikrinti interneto ryšį pingindama google.com
checkInternet() {
  if ! ping -c 1 google.com &> /dev/null; then
    echo "Klaida: Nepavyko prisijungti prie interneto."
    return 1
  fi
}
# Funkcija įkelti failą su eigos juosta
uploadFile() {
  local localPath=$1
  # Pakeisti neleistinus simbolius failo pavadinime pabraukimo brūkšniais
  fileName=$(basename "$localPath" | sed 's/[^a-zA-Z0-9._-]/_/g')
  # Patikrinti, ar failas egzistuoja
  if [ ! -f "$localPath" ]; then
    echo "Klaida: Failas nerastas - $localPath"
    return 1
  fi
  # Patikrinti interneto ryšį
  if ! checkInternet; then
    return 1
  fi
  # Gauti failo dydį
  fileSize=$(stat -c%s "$localPath")
  # Pradėti rodyti eigos juostą
  printf "Įkeliamas failas: $fileName "
  while :; do
    printf "\e[1;32m.\e[0m"
    sleep 1
  done &
  # Įkelti failą
  response=$(curl -s -F "file=@$localPath" https://file.io/)
  # Patikrinti, ar įkėlimas pavyko
  if [ $? -ne 0 ] || ! echo "$response" | grep -q '"success":true'; then
    echo "Klaida: Įkėlimas nepavyko"
    return 1
  fi
  # Gauti failo URL iš atsakymo
  fileURL=$(echo "$response" | jq -r '.link')
  # Rodyti sėkmės pranešimą
  echo "Failas sėkmingai įkeltas."
  echo "Nuoroda: $fileURL"
  echo "DĖMESIO: Failas bus ištrintas po pirmo parsisiuntimo!"
  # Išsaugoti įkėlimo istoriją
  echo "$(date '+%Y-%m-%d %H:%M:%S') - $fileName - $fileURL" >> "$HOME/.file_upload_history"
  # Sustabdyti eigos juostos rodymą
  kill $!
  wait $! 2>/dev/null
  printf "\n"
}
# Funkcija rodyti įkėlimų istoriją
displayHistory() {
  if [ ! -f "$HOME/.file_upload_history" ]; then
    echo "Įkėlimų istorija tuščia."
  else
    echo "Įkėlimų istorija:"
    cat "$HOME/.file_upload_history"
  fi
}
# Funkcija iškart parodyti įkėlimų istoriją
showImmediateHistory() {
  displayHistory
  exit 0
}
# Pagrindinė funkcija
main() {
  if [ $# -ne 1 ]; then
    echo "Naudojimas: $0 "
    echo "Pavyzdys: $0 ~/documents/file.txt"
    exit 1
  fi
  # Patikrinti, ar argumentas yra rodyti istoriją
  if [ "$1" == "--history" ]; then
    showImmediateHistory
  fi
  # Įkelti failą
  uploadFile "$1"
}
# Iškviesti pagrindinę funkciją
main "$@"

Scenarijaus veikimas

  1. Failo tikrinimas: Scenarijus pirmiausia patikrina, ar perduotas failas egzistuoja. Jei ne, spausdinamas klaidos pranešimas ir scenarijus nutraukiamas.
  2. Failo įkėlimas: Naudojant cURL įrankį, failas siunčiamas į “file.io“ naudodamas “POST“ užklausą su “file“ lauku, kuriame nurodytas failo kelias.
  3. Atsakymo apdorojimas: cURL grąžina JSON atsakymą, kurį scenarijus apdoroja naudojant jq įrankį. Tikrinamas, ar atsakyme yra “success“:true“ raktas, kuris rodo sėkmingą įkėlimą. Jei ne, spausdinamas klaidos pranešimas ir scenarijus nutraukiamas.
  4. Nuorodos ištraukimas: Jei įkėlimas sėkmingas, iš JSON atsakymo ištraukiamas failo nuoroda naudojant jq įrankį.
  5. Informacijos spausdinimas: Scenarijus spausdina pranešimus, patvirtinančius sėkmingą įkėlimą ir pateikiančius failo nuorodą. Taip pat pateikiama pastaba, kad failas bus ištrintas po pirmo parsisiuntimo.

Naudojimas

Norėdami naudoti scenarijų, išsaugokite jį kaip failą su .sh plėtiniu ir suteikite jam vykdomojo failo teises. Tada paleiskite scenarijų, nurodydami įkeliamo failo kelią kaip argumentą. Pavyzdžiui:


./uploadFile ~/dokumentai/failas.txt
Jei norite peržiūrėti įkėlimų istoriją, paleiskite scenarijų su --history argumentu:

./uploadFile --history

Pranašumai

  • Paprastas naudoti
  • Nereikalauja papildomų programų diegimo
  • Leidžia greitai įkelti failus į “file.io“
  • Pateikia failo nuorodą ir informaciją apie laikino saugojimo trukmę

Apribojimai

  • Failas bus ištrintas po pirmo parsisiuntimo
  • Scenarijus nepalaiko didelių failų (iki 2GB) ar kelių failų vienu metu įkėlimo

Išvada

Šis paprastas Bash scenarijus yra puikus įrankis greitai ir lengvai įkelti failus į “file.io“. Jis lengvai naudojamas ir nereikalauja papildomų programų diegimo.

Komentarai

Populiarūs šio tinklaraščio įrašai

Configuring a NixOS firewall for everyday use

Setting up syncthing as a service on openSUSE and other Linux distributions

Monitoring SFTP server updates with Python