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

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

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

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 802
  • Репутация: +21/-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

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

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 802
  • Репутация: +21/-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

  • Ветеран
  • *****
  • Сообщений: 1604
  • Репутация: +26/-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

  • Ветеран
  • *****
  • Сообщений: 802
  • Репутация: +21/-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

  • Ветеран
  • *****
  • Сообщений: 1604
  • Репутация: +26/-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

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

Оффлайн k0l0p0k

  • Ветеран
  • *****
  • Сообщений: 1604
  • Репутация: +26/-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

  • Ветеран
  • *****
  • Сообщений: 802
  • Репутация: +21/-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

  • Ветеран
  • *****
  • Сообщений: 1604
  • Репутация: +26/-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

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