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

Возможно, эта ошибка влияет на пользователей nvidia. https://bugs.launchpad.net/ubuntu/+source/compiz/+bug/1166765

попробуйте установить temp fix - откройте терминал и выполните следующее:

$ gsettings reset org.compiz.core: / org / compiz / profiles / unity / plugins / core / active-plugins $ shutdown -r now

исправляет это, но, возможно, не постоянно тем не менее, сохраните эту заметку.

1
задан 24 April 2016 в 15:59

7 ответов

Возможно, было бы разумнее использовать rsync. Например:

rsync -aP /source ~/destination

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

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

17
ответ дан 24 May 2018 в 03:14

Хотя я настоятельно рекомендую 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.
8
ответ дан 24 May 2018 в 03:14

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

lftp - Сложная программа передачи файлов lftp может обрабатывать несколько способов доступа к файлам - ftp, ftps, http, https, hftp, fish, sftp и file (https и ftps доступны только при компиляции lftp с помощью библиотеки GNU TLS или OpenSSL). Помимо FTP-подобных протоколов, lftp поддерживает протокол BitTorrent как команду «torrent». Также поддерживается посев.

Ссылка: man lftp

Чтобы скопировать файл sinlge: (используйте mget для нескольких файлов или с помощью * joker)
lftp -c "get -c file:///<absolute-path-to-file>"
Чтобы скопировать папку:
lftp -c "mirror -c file:///<absolute-path-to-directory>"

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

Для пробела, это работает для меня либо \, как shell или %20, как веб-URL.

2
ответ дан 24 May 2018 в 03:14
  • 1
    Спасибо, но как покрыть команду, если у файла есть пробел. Я пытался убежать от пробелов, но не повезло – αғsнιη 8 January 2015 в 16:48
  • 2
    @KasiyA, Обновленный ответ, оба работают для меня. – user.dz 8 January 2015 в 17:01

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

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

1
ответ дан 24 May 2018 в 03:14

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

Проверить размер целевого файла с помощью команды stat или ls -l Копировать с использованием:
dd if=<source-file-path> iflag=skip_bytes skip=<dest-file-size> oflag=seek_bytes seek=<dest-file-size> of=<dest-file-path>

Пример: [!d5 ]

$ 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
ответ дан 24 May 2018 в 03:14

Еще один способ:

Получить оставшийся размер для копирования
echo `stat -c "%s" <source-file>`-`stat -c "%s" <destination-file>` | bc
Перенаправить вывод 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
ответ дан 24 May 2018 в 03:14

Поскольку время кажется для вас проблемой, другой подход состоит в том, чтобы использовать команду split, чтобы разбить большой файл на более мелкие части, например split -b 1024m BIGFILE PIECES, чтобы создать 1 GByte-фрагменты с именем PIECESaa PIECESab ... PIECESzz [ ! d0]

Как только они создаются, вы будете использовать что-то вроде 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

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

1
ответ дан 24 May 2018 в 03:14

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

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