Сайт | Скачать | Видео | Wiki

Автор Тема: Быстрая передача файлов через интернет.  (Прочитано 1465 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 926
  • Репутация: +24/-0
  • Автор темы
Бывают случаи когда нужно передать файл достаточно большого размера, но через облако заходить муторно, и требует затрат по времени, нашёл интересный способ вот тут https://dzen.ru/a/ZcLeiJlTzW1wUC4f  , автор предложил использовать для этого https://transfer.sh/ , а так же скрипт, но по окончанию работы его скрипта не выдаётся адрес по которому следует скачать переданный файл,  либо я что-то не до понял, по этому предлагаю  доработанный скрипт в который добавил возможность по окончанию работы скрипта , увидеть ссылку по которой можно этот файл скачать.
как исползовать?
нужен xsel, pv , curl
адресс сохраняется в HOME/.config/ADR
подвешиваем на комбинацию клавиш этот скрипт,копируем желаемый файл в буфер, если файл большой наслаждаемся прогресс баром, по меньше тоже но не успеваем насладится, ну и дальше файл отсылается в https://transfer.sh получаем адрес скачивания в терминале, а также в файл по пути HOME/.config/ADR
--------------------------------------------
вот улучшеный код доработанного скрипта (спасибо k0l0p0k идеи огонь)
--------------------------------------------
Код
  
#!/bin/bash
#set -x
LOG_FILE=$HOME/.config/ADR

# Проверяем, существует ли файл $LOG_FILE, и создаем его, если он не существует
[ ! -f $LOG_FILE ] && > $LOG_FILE

file_dir=$(xsel -b)


    filename=$(basename "$file_dir")
    mkdir -p /tmp
    #tar -czvf /tmp/"$filename.tar.gz" "$file_dir"
    # Создаем несжатый архив
tar -cf /tmp/$filename.tar "$file_dir"

# Отображаем прогресс сжатия
pv /tmp/$filename.tar | gzip > /tmp/$filename.tar.gz
   
    response=$(curl --upload-file /tmp/$filename.tar.gz "https://transfer.sh/$filename.tar.gz")
   
     echo "                       "
     echo "-------------------------------------------------------------"
     echo "                       "
    #echo "Адрес файла: $response"
    echo "Адрес файла: $response" | tee -a  $LOG_FILE
    echo "                       "
     echo "-------------------------------------------------------------"
     echo "                       "
    rm /tmp/$filename.tar.gz
   
    echo "чтоб закончить ввод"
read ex




ниже с чего начиналось тоже оставлю может кому интересно последить за развитием сюжета :)
Код
$  ./trsgz <полный путь до файла>

этот создаёт zip архив 
Код
#!/bin/bash
set -x
SIZE=1000000

if [ -n "$(find "$1" -prune -size +"$SIZE"c)" ]; then
    filename=$(basename "$1")
    mkdir -p /tmp
    zip -r /tmp/"$filename.zip" "$1"
    response=$(curl --upload-file /tmp/$filename.zip "https://transfer.sh/$filename.zip")
    echo "Адрес файла: $response"
    rm /tmp/$filename.zip
else
    filename=$(basename "$1")
    response=$(curl --upload-file "$1" "https://transfer.sh/$filename")
    echo "Адрес файла: $response"
fi

этот создаёт tar.gz архив
Код
#!/bin/bash
set -x
SIZE=1000000

if [ -n "$(find "$1" -prune -size +"$SIZE"c)" ]; then
    filename=$(basename "$1")
    mkdir -p /tmp
    tar -czvf /tmp/"$filename.tar.gz" "$1"
    response=$(curl --upload-file /tmp/$filename.tar.gz "https://transfer.sh/$filename.tar.gz")
    echo "Адрес файла: $response"
    rm /tmp/$filename.tar.gz
else
    filename=$(basename "$1")
    response=$(curl --upload-file "$1" "https://transfer.sh/$filename")
    echo "Адрес файла: $response"
fi

оба позволяют получить ссылку которую можно передать для скачивания . Автору скрипта спасибо, и от меня подписка и нравлик.  Пост не рекламный просто понравился способ и транслирую его дальше, слегка доработав.
« Последнее редактирование: 10 Февраль 2024, 15:27:02 от totiks2012 »

Оффлайн k0l0p0k

  • Ветеран
  • *****
  • Сообщений: 1611
  • Репутация: +27/-1
1.пень G2020,8Gb,Radeon RX460 (Debian+openBox+LXPanel)
2.нетбук  Samsung N145 (Debian+openBox+LXPanel, ddr01)

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 926
  • Репутация: +24/-0
  • Автор темы
Re: Быстрая передача файлов через интернет.
« Ответ #2 : 09 Февраль 2024, 10:20:41 »
https://temp.sh/
О еще один сервис спасибо! Представленный вами держит 4 гиг, тот что выше 10 гиг единоразово, но всё равно интересно и спасибо!

в итоге пришел вот к такому скрипту для удобства, жмёт всё без разбора и использует xsel то есть копируем в буфер файл,каталог что угодно, набираем комбину горячих клавиш, и файл отослан во временное облако при этом выдает в терминале ссылку . естествено комбину нужно настроить с выводом терминала
Код
  
#!/bin/bash
#set -x


file_dir=$(xsel -b)


    filename=$(basename "$file_dir")
    mkdir -p /tmp
    tar -czvf /tmp/"$filename.tar.gz" "$file_dir"
    response=$(curl --upload-file /tmp/$filename.tar.gz "https://transfer.sh/$filename.tar.gz")
   
     echo "                       "
     echo "-------------------------------------------------------------"
     echo "                       "
    echo "Адрес файла: $response"
    echo "                       "
     echo "-------------------------------------------------------------"
     echo "                       "
    rm /tmp/$filename.tar.gz
   
    echo "чтоб закончить ввод"
read

« Последнее редактирование: 09 Февраль 2024, 10:53:55 от totiks2012 »

Оффлайн k0l0p0k

  • Ветеран
  • *****
  • Сообщений: 1611
  • Репутация: +27/-1
Re: Быстрая передача файлов через интернет.
« Ответ #3 : 09 Февраль 2024, 17:19:36 »
можно добавить сохранение ссылок в файлик(руками не сохранять)

Код
#LOG_FILE=`mktemp`
LOG_FILE=$HOME/.config/transfer.sh.history # можно в другое место
if [ -f $LOG_FILE ] 
  then echo "используем $LOG_FILE" # >/dev/null
  else > $LOG_FILE ; echo "создан $LOG_FILE"
fi
# остальной код
# ...
# если пользователь отметил больше одного файла/каталога :
# LIST=$(xsel -b | sed 's/file:\/\///g') # список файлов для упаковки
# tar -czvf "`mktemp`.tar.gz" $(echo "$LIST" | tr "\n" " ") # пакуем
# ...
# echo "Адрес файла: $response" >> $LOG_FILE # сохраним адрес
# cat  $LOG_FILE | tail -n 1 # покажем пользователю последний сохраненный адрес
# или (как вариант) :
# echo "Адрес файла: $response" | tee -a  $LOG_FILE # и покажем и сохраним одновременно
# ...
exit 0
и еще наверное нужно какой-нибудь прогресс показывать, если  процесс много времени занимает
« Последнее редактирование: 09 Февраль 2024, 21:20:03 от k0l0p0k »
1.пень G2020,8Gb,Radeon RX460 (Debian+openBox+LXPanel)
2.нетбук  Samsung N145 (Debian+openBox+LXPanel, ddr01)

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 926
  • Репутация: +24/-0
  • Автор темы
Re: Быстрая передача файлов через интернет.
« Ответ #4 : 09 Февраль 2024, 20:40:12 »
и еще наверное нужен какой-нибудь прогресс показывать, если  процесс много времени занимает
при закачивании curl выдаёт лог загрузки в процентах, но вы о псевдо баре загрузки наверно говорите...
я понял , вы говорили о долгом процессе упаковки, вроде решил это , ща протестирую также и с опцией сохранения в файл.
upd: Думаю это окончательный скрипт весьма интересный получился , спасибо! за идеи и участие k0l0p0k,
нужен xsel, pv , curl
адресс сохраняется в HOME/.config/ADR
подвешиваем на комбинацию клавиш этот скрипт,копируем желаемый файл в буфер, если файл большой наслаждаемся прогресс баром, по меньше тоже но не успеваем насладится, ну и дальше файл отсылается в https://transfer.sh получаем адрес скачивания в терминале, а также в файл по пути HOME/.config/ADR
вот код

Код
  
#!/bin/bash
#set -x
LOG_FILE=$HOME/.config/ADR

file_dir=$(xsel -b)


    filename=$(basename "$file_dir")
    mkdir -p /tmp
    #tar -czvf /tmp/"$filename.tar.gz" "$file_dir"
    # Создаем несжатый архив
tar -cf /tmp/$filename.tar "$file_dir"

# Отображаем прогресс сжатия
pv /tmp/$filename.tar | gzip > /tmp/$filename.tar.gz
   
    response=$(curl --upload-file /tmp/$filename.tar.gz "https://transfer.sh/$filename.tar.gz")
   
     echo "                       "
     echo "-------------------------------------------------------------"
     echo "                       "
    #echo "Адрес файла: $response"
    echo "Адрес файла: $response" | tee -a  $LOG_FILE
    echo "                       "
     echo "-------------------------------------------------------------"
     echo "                       "
    rm /tmp/$filename.tar.gz
   
    echo "чтоб закончить ввод"
read ex


« Последнее редактирование: 09 Февраль 2024, 22:55:14 от totiks2012 »

Оффлайн k0l0p0k

  • Ветеран
  • *****
  • Сообщений: 1611
  • Репутация: +27/-1
Re: Быстрая передача файлов через интернет.
« Ответ #5 : 09 Февраль 2024, 21:03:24 »
о псевдо баре загрузки наверно говорите
да, именно о процессе загрузки
закидывал на пробу 100Mb
в консоли тишина
когда процесс закончится пользователю непонятно
то ли ждать, то ли зависло
----
может pv попробовать приладить?
https://habr.com/ru/articles/65384/
----
curl --progress-bar --upload-file
« Последнее редактирование: 09 Февраль 2024, 21:39:56 от k0l0p0k »
1.пень G2020,8Gb,Radeon RX460 (Debian+openBox+LXPanel)
2.нетбук  Samsung N145 (Debian+openBox+LXPanel, ddr01)

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 926
  • Репутация: +24/-0
  • Автор темы
Re: Быстрая передача файлов через интернет.
« Ответ #6 : 09 Февраль 2024, 23:16:56 »
с curl как раз там всё понятно,он показывает процент закачки
 зависон кажушийся на процесе сжатия,это  решено.
там чуть выше код уже всё сделал
наверное будет правильно его в топик, утилита полезная, и главное простая!
« Последнее редактирование: 09 Февраль 2024, 23:32:11 от totiks2012 »

Оффлайн k0l0p0k

  • Ветеран
  • *****
  • Сообщений: 1611
  • Репутация: +27/-1
Re: Быстрая передача файлов через интернет.
« Ответ #7 : 10 Февраль 2024, 07:53:52 »
с curl как раз там всё понятно,он показывает процент закачки
на закачку да, еще бы на отдачу показывал
пробовал так: curl --progress-bar --upload-file
и что-то тишина, никакого вывода в терминале, впрочем это мелочи
надо еще wget опробовать, он на отдачу тоже умеет
--------
то что tar и gzip разделили это хорошая идея..
еще:
у меня xsel -b выдает вот такое:
file:///media/home/live/BOOK/FILE-2.01.pdf
поэтому вынужден использовать sed и tr в примере
чтобы отсечь лишнее и пути файликов получить
-----
и еще :) :
создание лог-файла (и проверку на наличие) зря не включили,
if then else fi из моего примера выше можно заменить на одну строчку, если нужно попроще:
Код
[ ! -f $LOG_FILE ] && > $LOG_FILE # если нет - создаст, если есть - ничего делать не будет
« Последнее редактирование: 10 Февраль 2024, 08:57:31 от k0l0p0k »
1.пень G2020,8Gb,Radeon RX460 (Debian+openBox+LXPanel)
2.нетбук  Samsung N145 (Debian+openBox+LXPanel, ddr01)

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 926
  • Репутация: +24/-0
  • Автор темы
Re: Быстрая передача файлов через интернет.
« Ответ #8 : 10 Февраль 2024, 10:19:41 »
у меня xsel -b выдает вот такое:
file:///media/home/live/BOOK/FILE-2.01.pdf
у вас скорее всего arch  установлен , вот строчки которые это решают
Код
file_dir=$(xsel -b)
file_dir="${file_dir#file://}" # удаление префикса file://

Оффлайн k0l0p0k

  • Ветеран
  • *****
  • Сообщений: 1611
  • Репутация: +27/-1
Re: Быстрая передача файлов через интернет.
« Ответ #9 : 10 Февраль 2024, 11:11:46 »
file_dir="${file_dir#file://}" # удаление префикса file://
если в переменной одна запись - помогает,
если в переменной список - обрабатывается только первый элемент списка, остальные без изменений,
разве что циклом пробегаться
1.пень G2020,8Gb,Radeon RX460 (Debian+openBox+LXPanel)
2.нетбук  Samsung N145 (Debian+openBox+LXPanel, ddr01)

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 926
  • Репутация: +24/-0
  • Автор темы
Re: Быстрая передача файлов через интернет.
« Ответ #10 : 10 Февраль 2024, 15:24:38 »
[ ! -f $LOG_FILE ] && > $LOG_FILE
спасибо как то упустил

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 926
  • Репутация: +24/-0
  • Автор темы
Re: Быстрая передача файлов через интернет.
« Ответ #11 : 22 Август 2024, 13:30:31 »
https://transfer.sh  всё!!! 
Вместо него https://bashupload.com . Позволяет заслать  файл до 50гиг. вот измененый под него скрипт, для его работы нужен xsel,curl,pv
копируем файл в буфер обмена, запускаем скрипт, он засылает его на bashupload.com, и в терминале получаем ссылку
upd2:  оказалось что упаковщик gz не способен упаковать то что уже в архиве и на выходе получался архив с нулевым файлом, добавил проверку на популярные архивы, скрипт исправил работает. Напомню на всякий пожарный  имя архива не должно содержать пробелы.
Код

#!/bin/bash
#set -x
LOG_FILE="$HOME/.config/ADR"

# Получаем путь к файлу из буфера обмена
file_dir="$(xsel -b)"

# Проверяем, существует ли файл
if [[ ! -f "$file_dir" ]]; then
    echo "Ошибка: Файл не найден или путь неверен: $file_dir" | tee -a "$LOG_FILE"
    exit 1
fi

# Записываем полный путь файла в лог
echo "Полный путь файла: $file_dir" | tee -a "$LOG_FILE"

# Определяем имя файла
filename=$(basename "$file_dir")
mkdir -p /tmp

# Проверка на тип архива или образа
if [[ "$filename" == *.tar || "$filename" == *.tar.gz || "$filename" == *.zip || "$filename" == *.7z || "$filename" == *.iso || "$filename" == *.img ]]; then
    temp_file="$file_dir"
else
    # Создаем несжатый архив, если файл не является архивом или образом
    tar -cf "/tmp/${filename}.tar" -C "$(dirname "$file_dir")" "$filename"
    temp_file="/tmp/${filename}.tar"
fi

# Если файл не является gzip, zip, 7z, iso или img, сжимаем его
if [[ "$filename" != *.gz && "$filename" != *.zip && "$filename" != *.7z && "$filename" != *.iso && "$filename" != *.img ]]; then
    gzip "$temp_file"
    temp_file="${temp_file}.gz"
fi

# Загружаем файл на bashupload.com
response=$(curl -T "$temp_file" "https://bashupload.com/")

echo "                       "
echo "-------------------------------------------------------------"
echo "Полный путь файла: $file_dir"
# Выводим адрес файла и логируем его
echo "                       "
echo "-------------------------------------------------------------"
echo "                       "
echo "Адрес файла: $response" | tee -a "$LOG_FILE"
echo "                       "
echo "-------------------------------------------------------------"
echo "                       "
echo "чтоб закончить ввод"
read ex


все засланые в bashupload.com ссылки сохраняются так же в $HOME/.config/ADR   
upd: слегка еще улучшил форматирование, теперь дополнительно к показу URL,по которому можно скачать файл, и в терминале и  в лог файле $HOME/.config/ADR
 выводится полный адрес до файла который заслали в файло-обменик.
upd2: изменил слегка код, до этого сохранял в архив файл со структурой пути, мне показалось это не удобным, теперь жмет просто файл без структуры, не нужно следовать до файла преодолевая дебри пути.

...кроме того хочу напомнить что в Telegrame есть функция Избраного ,которую можно вызвать нажав на горячие клавишы ctrl+shift+s ,находясь в любом чате  Telegrame , откроется окно Избраного и в него мы можем заслать нужный нам файл,можно отправлять файлы размером до 2 ГБ .
« Последнее редактирование: 30 Август 2024, 20:40:57 от totiks2012 »

Оффлайн shelezyaka

  • Ветеран
  • *****
  • Сообщений: 817
  • Репутация: +39/-0
Re: Быстрая передача файлов через интернет.
« Ответ #12 : 23 Август 2024, 08:26:00 »
...кроме того хочу напомнить что в Telegrame есть функция Избраного ,которую можно вызвать нажав на горячие клавишы ctrl+shift+s ,находясь в любом чате  Telegrame , откроется окно Избраного и в него мы можем заслать нужный нам файл
У меня эта связка не работает , может из-за того что по ctrl+shift язык переключается ?
Intel(R) Xeon(R) CPU E5-2630 v2 , GeForce GTX 560 Ti ,  16Gb DDR3 ,  HDD - 160 Gb  SSD  250 Gb
Acer Aspire One D270-26Сkk Intel Atom N2800 1.86GHz 2Gb DDR3  HDD - 720 Gb

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 926
  • Репутация: +24/-0
  • Автор темы
Re: Быстрая передача файлов через интернет.
« Ответ #13 : 23 Август 2024, 08:48:57 »
У меня эта связка не работает , может из-за того что по ctrl+shift язык переключается ?
в telegram три полоски с левой стороны выбрать избраное--, то же самое альтернатива ctrl+shift+s, я со связки ctrl+shift   для языка ушел ибо эта связка везде ctrl+shift +перетаскивание мышью (lxde,xfce4) является стандартной для создания симлинков, а они мне зело нужны, а из терминала иногда лень, хотя конечно правильней и предпочтительней.
« Последнее редактирование: 27 Август 2024, 08:45:25 от totiks2012 »

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 926
  • Репутация: +24/-0
  • Автор темы
Re: Быстрая передача файлов через интернет.
« Ответ #14 : 28 Август 2024, 15:30:41 »
 ;D Уффф! Тема принесла мне удовольствие сегодня. Поговорим о возможности быстрой передачи файлов  через Telegram.
Для этого обзаведёмся нужными инструментами (у меня Debian ,арчеводы извините пожалуйста за это, но вы прохаваные и быстро соориентируетесь)
Код
sudo apt install python3-pip
sudo apt install pipx
pipx install telegram-send
pipx ensurepath
sudo apt install xsel

далее настроим telegram-send обычно pipx устанавливает его в $HOME/.local/pipx/venvs/telegram-send/bin/
введем в терминал
Код
$HOME/.local/pipx/venvs/telegram-send/bin/telegram-send --configure
и telegram-send запросит ключ к API ,
чтоб получить его необходимо произвести следующие шаги,
Откройте Telegram и найдите @BotFather:

Введите @BotFather в поле поиска и выберите официального бота.
Начните разговор с BotFather, отправив команду /start.

Создайте нового бота, отправив команду:

/newbot

Вам будет предложено выбрать имя для вашего бота. Введите любое имя, например MyFileSenderBot.

Затем выберите уникальное имя пользователя для бота, которое должно оканчиваться на bot, например, myfilesender_bot.

После создания бота BotFather отправит вам токен API — уникальную строку, что-то вроде 123456789:ABCdefGhIjkLmnoPQRStUvWxYz.
Сохраните этот токен.
этот токен следует подставить  где он был запрошен в терминале и нажать ввод в ответ будет предложен уникальный код
который следует ввести в чат бота после его старта. Теперь чат-бот и ваш telegram-send сопряжены.

Далее следует код скрипта который использует xsel для автоматизации получения полного пути файла который мы хотим переслать в чат бот telegram.

Как использовать скрипт, скопировать файл который хотим перслать в буфер обмена, скрипт предварительно подвешиваем на горячую клавишу,
 и запускаем скрипт, все файл передан в telegram в указаный чат.
Код:
Код
#!/bin/bash
#set -x

# Получаем путь до файла из буфера обмена
FILE_PATH="$(xsel -b)"

# Проверяем, существует ли файл по указанному пути
if [ -f "$FILE_PATH" ]; then
    # Отправляем файл с помощью telegram-send
    $HOME/.local/pipx/venvs/telegram-send/bin/telegram-send --file "$FILE_PATH"
    echo "Файл успешно отправлен!"
sleep 5
else
    echo "Ошибка: файл не найден по указанному пути."
fi


upd: а если нам захочется на другой машине в этот же чат бот файлы сливать , то достаточно ввести при настройке telegram-send --configure сохранёный токен,
 в ответ на который получим код, который бот зарегестрирует, максимальный размер пересылаемого файла 2 гиг.

upd2:
внёс небольшие дополнения в код  позволяющие увидеть что началась передача файла, а также показывается общее время передачи файла. telegram-send не имеет встроеного прогресс-бара...(увы точно не имеет, то есть на больших файлах придется дождатся сообщения что файл закачен, может есть смысл вместо sleep применить read ,чтоб скрипт закрылся по вводу? )
Код
#!/bin/bash
#set -x

# Получаем путь до файла из буфера обмена
FILE_PATH="$(xsel -b)"

# Проверяем, существует ли файл по указанному пути
if [ -f "$FILE_PATH" ]; then
    # Сохраняем начальное время
    START_TIME=$(date +%s)
echo "== Начинаю отправку файла.Ждите =="
    # Отправляем файл
    $HOME/.local/pipx/venvs/telegram-send/bin/telegram-send --file "$FILE_PATH"

    # Проверяем, успешно ли выполнена команда
    if [ $? -eq 0 ]; then
        # Сохраняем конечное время
        END_TIME="$(date +%s)"

        # Вычисляем прошедшее время
        ELAPSED_TIME="$(($END_TIME - $START_TIME))"

        # Преобразуем прошедшее время в часы, минуты и секунды
        HOURS="$(($ELAPSED_TIME / 3600))"
        MINUTES="$(($ELAPSED_TIME % 3600 / 60))"
        SECONDS="$(($ELAPSED_TIME % 60))"

        echo "Файл успешно отправлен!"
        echo "Время передачи: $HOURS ч. $MINUTES мин. $SECONDS сек."
    else
        echo "Ошибка при отправке файла."
    fi
    sleep 6
else
    echo "Ошибка: файл не найден по указанному пути."
fi

« Последнее редактирование: 28 Август 2024, 19:22:30 от totiks2012 »