Я хочу перемещаться/копировать большой размер файлов в моей собственной системе, и я хочу использовать wget
команда с -c
переключитесь на наличие resumable передачи. Копия (cp
) или переместитесь (mv
) команды не предоставляют эту возможность для меня.
Действительно ли возможно использовать wget
скопировать эти файлы от одного каталога до другого каталога в моей собственной системе?
Да, но Вам нужен веб-сервер, настроенный для обслуживания файлов, которые необходимо скопировать.
попытка что-то вроде этого. На терминале запустите простой веб-сервер:
cd /etc/
python -m SimpleHTTPServer
тогда открытый другой терминал и сделайте:
wget http://localhost:8000/passwd
passwd файл будет загружен на Ваш текущий каталог. Вы в действительности копируете его от/etc/до Вашего корневого каталога.
я не уверен, почему Вы хотите сделать это, но да, в принципе, как Вы видите, это возможно.
В то время как я настоятельно рекомендую 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.
Вероятно, имело бы больше смысла использовать rsync
вместо этого. Например:
rsync -aP /source ~/destination
-P
или --partial
флаг препятствует тому, чтобы неполные файлы были удалены, если существует прерывание. При выполнении той же команды снова любая неполная передача будет возобновлена.
Таким образом, никакая потребность обеспокоиться локальным веб-сервером, в котором Вы нуждались бы для wget
.
это возможно. У Вас должен быть веб-сервер как апач или nginx., если это является апачским, для копирования файла можно сделать это
wget http://localhost/path/to/file/starting/from/var/www/
, потому что de корневой каталог к апачскому серверу является/var/www
Все еще иначе:
Заставляют остающийся размер копировать
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
Так как время, кажется, проблема для Вас - другой подход должен использовать команду 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' является единственным возможным транспортом - для частей.
Другой способ использовать, с помощью 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>
Пример:
$ 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
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.