Действительно ли возможно использовать wget для копирования файлов в моей собственной системе?

Я хочу перемещаться/копировать большой размер файлов в моей собственной системе, и я хочу использовать wget команда с -c переключитесь на наличие resumable передачи. Копия (cp) или переместитесь (mv) команды не предоставляют эту возможность для меня.

Действительно ли возможно использовать wget скопировать эти файлы от одного каталога до другого каталога в моей собственной системе?

4
задан 24 April 2016 в 05:59

8 ответов

Да, но Вам нужен веб-сервер, настроенный для обслуживания файлов, которые необходимо скопировать.

попытка что-то вроде этого. На терминале запустите простой веб-сервер:

cd /etc/
python -m SimpleHTTPServer

тогда открытый другой терминал и сделайте:

wget http://localhost:8000/passwd 

passwd файл будет загружен на Ваш текущий каталог. Вы в действительности копируете его от/etc/до Вашего корневого каталога.

я не уверен, почему Вы хотите сделать это, но да, в принципе, как Вы видите, это возможно.

16
ответ дан 23 November 2019 в 11:34

В то время как я настоятельно рекомендую rsync, можно использовать curl, не выполняя сервер HTTP:

curl -O -C - file:///path/to/some/file

curl отличается от wget, но так же, как, если не больше, мощен. Всегда удобно иметь в любой системе.

От man curl :

   -C, --continue-at <offset>
          Continue/Resume  a  previous  file transfer at the given offset.
          Use  "-C  -" to tell curl to automatically find out where/how to
          resume the transfer
   -O, --remote-name
          Write  output to a local file named like the remote file we get.
9
ответ дан 23 November 2019 в 11:34

Вероятно, имело бы больше смысла использовать rsync вместо этого. Например:

rsync -aP /source ~/destination

-P или --partial флаг препятствует тому, чтобы неполные файлы были удалены, если существует прерывание. При выполнении той же команды снова любая неполная передача будет возобновлена.

Таким образом, никакая потребность обеспокоиться локальным веб-сервером, в котором Вы нуждались бы для wget.

17
ответ дан 23 November 2019 в 11:34

это возможно. У Вас должен быть веб-сервер как апач или nginx., если это является апачским, для копирования файла можно сделать это

wget http://localhost/path/to/file/starting/from/var/www/, потому что de корневой каталог к апачскому серверу является/var/www

1
ответ дан 23 November 2019 в 11:34

Все еще иначе:

  1. Заставляют остающийся размер копировать

    echo `stat -c "%s" <source-file>`-`stat -c "%s" <destination-file>` | bc
    
  2. вывод Перенаправления tail

    tail -c <remaining-size> <source-file> >> <destination-file>
    

Пример:

$ echo `stat -c "%s" /boot/grml/u1404_64_d.iso`-`stat -c "%s" /home/user/u1404_64_d.iso` | bc
433049600

$ tail -c 433049600 /boot/grml/u1404_64_d.iso >> /home/user/u1404_64_d.iso

$ md5sum /boot/grml/u1404_64_d.iso /home/user/u1404_64_d.iso
dccff28314d9ae4ed262cfc6f35e5153  /boot/grml/u1404_64_d.iso
dccff28314d9ae4ed262cfc6f35e5153  /home/user/u1404_64_d.iso
1
ответ дан 23 November 2019 в 11:34

Так как время, кажется, проблема для Вас - другой подход должен использовать команду split для повреждения большого файла в мелкие кусочки, например, split -b 1024m BIGFILE PIECES для создания частей на 1 Гбайт под названием PIECESaa PIECESab... PIECESzz

, Как только они создаются, Вы использовали бы что-то как cat PIECES?? >/some/where/else/BIGFILE для восстановления BIGFILE, или снова, из-за проблем времени:

mkdir done
>/somewhere/else/BIGFILE
for piece in PIECES??
do
    cat $piece >>/some/where/else/BIGFILE
    status=$?
    if [[ $status -eq 0 ]]
    then
        mv $piece done
    fi
done

, Если сбои 'копии' можно переместить файлы от./делал назад к. и попробуйте еще раз, как только вопрос времени решен. - Рассматривают это как альтернативу, когда wget не возможен. Это - что-то, что я использовал за эти годы при копировании в удаленное местоположение, и что-то как 'простой ftp' является единственным возможным транспортом - для частей.

1
ответ дан 23 November 2019 в 11:34

Другой способ использовать, с помощью dd:

  1. целевой размер файла Проверки с помощью stat или ls -l использование Копии команды
  2. :

    dd if=<source-file-path> iflag=skip_bytes skip=<dest-file-size> oflag=seek_bytes seek=<dest-file-size> of=<dest-file-path>
    

Пример:

$ ls -l /home/user/u1404_64_d.iso
-rw-rw-r-- 1 user user 147186688 Jan  8 17:01 /home/user/u1404_64_d.iso

$ dd if=/boot/grml/u1404_64_d.iso \
  iflag=skip_bytes skip=147186688 oflag=seek_bytes seek=147186688 \
  of=/home/user/u1404_64_d.iso
1686798+0 records in
1686798+0 records out
863640576 bytes (864 MB) copied, 15.1992 s, 56.8 MB/s

$ md5sum /boot/grml/u1404_64_d.iso /home/user/u1404_64_d.iso
dccff28314d9ae4ed262cfc6f35e5153  /boot/grml/u1404_64_d.iso
dccff28314d9ae4ed262cfc6f35e5153  /home/user/u1404_64_d.iso

Это могло быть вредно, поскольку это может перезаписать файл без проверки, здесь лучшая функция для проверки на хеш прежде продолжается:

ddc () {

    # enable hash check, need much time to read both files
    hashcheck=true

    # check destination folder existance or assume it's a file name
    if [ -d "$2" ]
    then
        ofpath="$2/`basename \"$1\"`"
    else
        ofpath="$2"
    fi

    # check destination file existance
    if [ ! -f "$ofpath" ]
    then
        a="n"
    else
        ofsize=`stat -c "%s" "$ofpath"`


        # calculate hash
        if [ $hashcheck ]
        then 
            ifhash=`dd if="$1" iflag=count_bytes count=$ofsize 2>/dev/null | md5sum | awk '{print $1}'`
            #ifhash=`head -c $ofsize "$1" | md5sum | awk '{print $1}'`
            ofhash=`md5sum "$ofpath" | awk '{print $1}'`

            # check hash before cont.
            if [ $ifhash == $ofhash ]
            then
                a="y"
            else
                echo -e "Files MD5 mismatch do you want to continue:\n(Y) Continue copy, (N) Start over, (Other) Cancel"
                read a
            fi
        else
            a="y"
        fi
    fi

    case $a in
    [yY])
        echo -e "Continue...\ncopy $1 to $ofpath"
        dd if="$1" iflag=skip_bytes skip=$ofsize oflag=seek_bytes seek=$ofsize of="$ofpath"
        ;;
    [nN])
        echo -e "Start over...\ncopy $1 to $ofpath"
        dd if="$1" of="$ofpath"
        ;;
    *)
        echo "Cancelled!"
        ;;
    esac

}

Использование:

ddc <source-file> <destination-file-or-folder>

Пример:

$ ls -l /home/user/u1404_64_d.iso
-rw-rw-r-- 1 user user 241370112 Jan  8 17:09 /home/user/u1404_64_d.iso

$ ddc /boot/grml/u1404_64_d.iso /home/user/u1404_64_d2.iso
Continue...copy /boot/grml/u1404_64_d.iso to /home/user/u1404_64_d.iso
1502846+0 records in
1502846+0 records out
769457152 bytes (769 MB) copied, 13.0472 s, 59.0 MB/s
1
ответ дан 23 November 2019 в 11:34

lftp может обработать локальные файловые системы без потребности в сервере.

lftp - Сложная программа передачи файлов

lftp может обработать несколько методов доступа к файлу - ftp, ftps, http, https, hftp, рыба, sftp и файл (https, и ftps только доступны, когда lftp компилируется с библиотекой GNU TLS или OpenSSL).

Помимо подобных FTP протоколов, lftp имеет поддержку протокола БитТоррента как команда 'потока'. Отбор также поддерживается.

Ссылка: man lftp

  • Скопировать sinlge файл: (используйте mget для нескольких файлов или с * шутник)

    lftp -c "get -c file:///<absolute-path-to-file>"
    
  • Скопировать папку:

    lftp -c "mirror -c file:///<absolute-path-to-directory>"
    

Сначала -c для команды, второй -c для продолжаются, когда это возможно.

Для пространства Это действительно работает на меня также \ как оболочка или %20 как веб-URL.

2
ответ дан 23 November 2019 в 11:34

Другие вопросы по тегам:

Похожие вопросы: