В іншому випадку, чи існує якась альтернативна утиліта командного рядка, яка може цього досягти?
В іншому випадку, чи існує якась альтернативна утиліта командного рядка, яка може цього досягти?
Відповіді:
Хоча cp
ця функція не має, ви можете використовувати pv
це:
pv my_big_file > backup/my_big_file
Примітка. Цей метод втратить права доступу та права власності на файл. Файли, скопійовані таким чином, матимуть такі ж дозволи, як якщо б ви їх створили самі і належатимуть вам.
У цьому прикладі в pv
основному просто виводиться файл на stdout *, який ви перенаправляєте у файл за допомогою >
оператора. Одночасно він друкує інформацію про прогрес до терміналу, коли ви це робите.
Ось як це виглядає:
stefano@ubuntu:~/Data$ pv my_big_file > backup/my_big_file
138MB 0:00:01 [73.3MB/s] [=================================>] 100%
Можливо, вам доведеться встановити pv (альтернативно, введіть sudo apt-get install pv
) у вашу систему.
*: Технічний біт
У unix-подібній системі є три важливі потоки даних: stdout (стандартний вихід), stderr (стандартна помилка) та stdin (стандартний вхід). У кожній програмі є всі три, так би мовити. >
Оператор перенаправлення перенаправляє висновок програми в файл. Без аргументів, як ви бачите вище, >
перенаправляє стандартний вихід програми у файл. cp
в основному не робить нічого химернішого, ніж
cat source > destination
(де cat
щойно читає файл і роздруковує його до stdout). pv
так само, як кішка, але якщо ви переспрямовуєте його вихідний потік кудись інше, він надрукує інформацію про прогрес замість stdout.
Погляньте, man pv
щоб дізнатися більше про це.
Інший варіант, як пропонує DoR у цій відповіді , - використовувати замість rsync:
$ rsync -ah --progress source-file destination-file
sending incremental file list
source-file
621.22M 57% 283.86MB/s 0:00:01
Це дозволить зберегти дозволи / права власності на файли, показуючи прогрес.
alias cp="rsync -avz"
CP є застарілим.
pv
, ти можеш проскочити /proc/PID of cp/fd
і /proc/PID of cp/fdinfo
зрозуміти прогрес. (Ви повинні вирішити швидкість.) Я використовую цю техніку для перегляду updatedb
.
-z
ймовірно, слід використовувати лише для мережевих копій; стиснення та декомпресія даних для локальної копії - це чисті надмірні витрати.
rsync
обов'язково не додайте трейлінг /
до вихідного шляху (або видаліть, якщо, наприклад, завершення bash, помістіть його туди автоматично). В іншому випадку ви отримаєте результати, інші, ніж при використанні cp
(або gcp
).
Немає. Дивіться тут , чому. Хоча це робить більше, ніж потрібно, rsync
має --progress
параметр. -a
Буде тримати дозвіл, і т.д., і -h
буде читабельним людиною.
rsync -ah --progress source destination
Вихід буде виглядати приблизно так:
Pictures/1.jpg
2.13M 100% 2.28MB/s 0:00:00 (xfr#5898, to-chk=1/5905)
Pictures/2.jpg
1.68M 100% 1.76MB/s 0:00:00 (xfr#5899, to-chk=0/5905)
-r
прапор для повторного звернення до каталогів. Він навіть може бути псевдонімом як пряма заміна для cp:alias cp="rsync -ah --progress"
--progress
моєї голови повертається 🙃, переглядаючи весь вихідний дисплей у терміналі. Тож ті, хто приходить сюди від пошуку ключових слів AOL, rsync -ah --info=progress2 [source] [destination]
представляє вихід у трохи більш розумному 👩⚕️ способі IMHO.
Якщо ви хочете побачити , якщо ваші передачі файлів правильно , ви можете використовувати gcp
і gcp
, як сп , але за замовчуванням дає вам прогрес бар , так що ви можете побачити , що копіюється. Як зазначається у вікі програми , gcp
є кілька корисних функцій, таких як
- індикація прогресування передачі
- безперервне копіювання з помилкою (перехід до наступного файлу)
- журнал статусу копіювання: gcp записує всі свої дії, щоб можна було знати, які файли успішно скопійовано
- ім'я mangling для обробки обмежень цільової файлової системи (наприклад, видалення несумісних символів "*" або "?" у FAT)
Однак, навіть коли смуга прогресу досягла 100% під час використання інструменту, потрібно зачекати, поки підключиться підказка терміналу, перш ніж безпечно вилучити носій, щоб ви могли переконатися, що процес перенесення успішно закінчився.
gcp
використовується для копіювання файлів і має такі параметри, --preserve
щоб зберегти різні атрибути та дозволи та --recursive
цілі каталоги можна скопіювати. Більш детальну інформацію про її параметри можна отримати, ввівши man gcp
або перейшовши на веб- сайти Ubuntu в Інтернеті . Підручник також доступний на цьому сайті .
Встановити gcp
з сховищ за допомогою
sudo apt-get install gcp
( Примітка . У Ubuntu 12.10, наприклад, нова точка автоматичного налаштування є /media/user/usbdisk
)
Ви можете скопіювати файл на свій носій, ввівши
gcp /home/mike/file.mp4 /media/usb
і скопіюйте папку на свій носій
gcp -rv ~/Podcasts /media/Mik2
Вибірка вибірки gcp
з панелі прогресу:
gcp ~/Videos_incIplayer/mars.flv /media/Mik2
Copying 168.57 MiB 100% |########################################################| 7.98 M/s Time: 00:00:22
Ви, звичайно, можете вказати кілька файлів або папок, які потрібно скопіювати на свій диск, і є багато інших варіантів, які охоплені man gcp
.
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NotSupported: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
export DISPLAY=:0.0
перед запуском gcp. Якщо машина без голови, то вам доведеться запустити xsession у віртуальний фреймбуфер або щось подібне, тоді, напевно, вам слід просто шукати іншу програму
gcp
досить пристойний, але вимога DBUS / X є дивним. Я обробляв це через SSH за допомогою пересилання ssh: ssh -X user@host
і це дозволило мені запустити його.
Я отримую вихід від використання CURL саме для цієї мети. На головній сторінці вказаний протокол "FILE" як підтримуваний, тому просто використовуйте його, як і будь-який інший протокол у URL-адресі:
curl -o destination FILE://source
Швидкість, прогрес, час, що залишився, і багато іншого - все у звичному форматі.
pv
і те, що не дозволить зберігати дозволи.
Хоча він не відображає швидкості, при копіюванні декількох файлів -v
параметр cp
команди надасть вам інформацію про хід. напр
cp -rv old-directory new-directory
Ядро знає більшість даних, таких як швидкість, а часто і відсоток. Сучасні ядра викривають це через файлову систему / proc.
showpeed з https://github.com/jnweiger/showspeed використовує цю інформацію. Він може приєднуватися до вже запущених програм і періодично оновлювати такі:
$ dd if=bigfile of=/tmp/otherbigfile &
$ showspeed dd
dd looks like a process name. pid=4417 matches av0=dd.
p/4417/fd/0r /home/jw/bigfile 113MB/s (12%, 2.3GB) 9m:35
p/4417/fd/1w /tmp/otherbigfile 182MB/s (2.6GB)
p/4417/fd/0r /home/jw/bigfile 285MB/s (15%, 3.0GB) 8m:08
p/4417/fd/0r /home/jw/bigfile 115MB/s (16%, 3.2GB) 8m:01
p/4417/fd/0r /home/jw/bigfile 107MB/s (17%, 3.4GB) 7m:39
p/4417/fd/1w /tmp/otherbigfile 104MB/s (3.5GB)
p/4417/fd/0r /home/jw/bigfile 139MB/s (19%, 3.7GB) 7m:37
p/4417/fd/0r /home/jw/bigfile 116MB/s (20%, 3.9GB) 7m:18
p/4417/fd/1w /tmp/otherbigfile 67MB/s (4.0GB)
p/4417/fd/1w /tmp/otherbigfile 100MB/s (4.1GB)
...
pkill -USR1 dd
щоб змусити dd
показувати його статус, інший варіант watch -n 1 pkill -USR1 dd
- зробити так, щоб він показував свій прогрес періодично (щосекунди).
У progress
сховищах є інструмент, який називається, який здатний досліджувати різні команди і відображати інформацію про хід для них.
Встановіть його за допомогою команди
sudo apt-get install progress
Цей інструмент можна використовувати так:
cp bigfile newfile & progress -mp $!
Вихід:
[11471] cp /media/Backup/Downloads/FILENAME.file
29.9% (24.2 MiB / 16 MiB)
У той час як pv
може впоратися з локальними cp
завданнями, використовуючи dd
з pv
може працювати як з локальними ( cp
) і віддалених ( scp
) завдань.
dd if=path/to/source.mkv | pv | dd of=path/to/dest.mkv
Перевірте, будь ласка, path/to/dest.mkv
виходиtouch path/to/dest.mkv
Це може показувати прогрес, але якщо ви хочете відсоткову інформацію,
dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv
Замініть 100M
вище реальний розмір вихідного файлу.
Хоча scp
навряд чи може показати поточний прогрес, використовуючи dd
з pv
шматок пирога.
ssh onemach@myotherhost dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv
Існує новий інструмент під назвою cv, який може знайти будь-який дескриптор, пов’язаний із запущеною командою та показувати хід та швидкість: https://github.com/Xfennec/cv
cv -w
виводить статистику для всіх запущених операцій cp, mv тощо
watch cv -q
ще акуратніше
cp
копіює каталог рекурсивно чи ні.
Як багато хто говорив, cp не включає цю функціональність.
Тільки, щоб кинути свої 0,02 долара, що я зазвичай роблю у тривіальних ситуаціях копіювання (тобто ні -R
):
Подивіться, наскільки великий файл і пам’ятайте
Почніть копіювання
Відкрийте інший термінал
Виконати watch ls -lh DIR
в каталозі, де знаходиться ціль
Це може тримати мене в курсі розміру цільового файлу, з цілком мінімальними клопотами.
В якості альтернативи для менш тривіальних ситуацій, наприклад, рекурсивного копіювання каталогів, ви можете watch du -hs DIR
переглянути підсумки розміру DIR. Однак для обчислення може знадобитися багато часу і навіть уповільнити копіювання, тому ви можете використовувати -n INTERVAL
аргумент для перегляду, щоб компроміс був прийнятним.
Оновлення: Якщо ви використовуєте макіяж-команди з командою, яка використовується для watch du, наприклад watch du -hs backup/*
, не забудьте процитувати:
watch "du -hs backup/*"
в іншому випадку диві картки будуть розгорнуті лише один раз , коли дивитися буде запущено, тому ду не буде шукати нові файли / підкаталоги.
dd status=progress
Додана опція у GNU Coreutils 8.24+ (Ubuntu 16.04):
dd if=src of=dst status=progress
Термінал показує рядок типу:
462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s
Дивіться також: Як Ви відстежуєте хід ДД?
Якщо у вас rsync 3.1 або вище ( rsync --version
), ви можете скопіювати (cp -Rpn), зберігаючи дозволи та права власності, повторювати каталоги, "без клобара" та відображати загальний прогрес (замість просто прогресу за файлом), швидкість копіювання та ( дуже приблизний) приблизний час, що залишився:
sudo rsync -a --info=progress2 --no-i-r /source /destination
Зауважте, що sudo потрібен лише у випадку, коли ви маєте справу з каталогами / файлами, якими ви не володієте. Крім того, без цього --no-i-r
відсоток може бути скинутий до нижчого числа в якийсь момент під час копіювання. Можливо, пізніші версії rsync за замовчуванням становлять no-ir з info = progress2, але це не в поточній версії 3.1.2.
Я виявив, що відсоток і час, що залишився, значно завищені при копіюванні в каталог, який вже містить файли (наприклад, коли ти зазвичай використовуєш cp -n "no clobber").
Використовуйте сценарій оболонки:
#!/bin/sh
cp_p()
{
strace -q -ewrite cp -- "${1}" "${2}" 2>&1 \
| awk '{
count += $NF
if (count % 10 == 0) {
percent = count / total_size * 100
printf "%3d%% [", percent
for (i=0;i<=percent;i++)
printf "="
printf ">"
for (i=percent;i<100;i++)
printf " "
printf "]\r"
}
}
END { print "" }' total_size=$(stat -c '%s' "${1}") count=0
}
Це буде виглядати так:
% cp_p /home/echox/foo.dat /home/echox/bar.dat
66% [===============================> ]
Залежно від того, що ви хочете зробити, Midnight Commander ( mc
) може бути відповіддю. Я здивований, що це ще не було згадано.
Інструменти на кшталт pv
або rsync
хороші для відображення прогресу передачі одного величезного файлу, але коли справа стосується копіювання цілих каталогів / дерев, mc
обчислює розмір, а потім дуже добре відображає хід. Крім того, він доступний поза коробкою для більшості систем.
ще одним варіантом збереження атрибутів може бути (якщо source
папка буде створена в destination
)
tar -c source | pv -e -t -p -r | tar -C destination -x
сподіваюся, що комусь це може бути корисно. Оцінивши час передачі, це можна досягти, виконавши do -s source
заздалегідь і передавши його як -s <size>
параметр pv
.
-f -
є зайвим. tar
За замовчуванням вихід c
і вхід для x
- stdout та stdin.
Перевірте вихідний код на прогрес_бар у нижньому сховищі git
https://github.com/Kiran-Bose/supreme
Крім того, спробуйте призначений для користувача пакет Баш скрипт верховна
Завантажте файл deb та встановіть у дистрибутиві на основі debian або завантажте вихідні файли, модифікуйте та використовуйте для інших дистрибутивів
Огляд функціональності
(1) Відкрити програми ---- Firefox ---- Калькулятор ---- Налаштування
(2) Управління файлами ---- Пошук ---- Навігація ---- Швидкий доступ
|----Select File(s)
|----Inverse Selection
|----Make directory
|----Make file
|----Open
|----Copy
|----Move
|----Delete
|----Rename
|----Send to Device
|----Properties
(3) Керування телефоном ---- Переміщення / Копіювання з телефону ---- Переміщення / Копіювання на телефон ---- Синхронізація папок
(4) Керування USB ---- Переміщення / копіювання з USB ---- Переміщення / копіювання на USB
pv знає, як переглядати дескриптори файлів, надані pid, чи це cp чи щось інше
З документації:
(Linux only): Watching file descriptor 3 opened by another process 1234:
pv -d 1234:3
(Linux only): Watching all file descriptors used by process 1234:
pv -d 1234
Приклад:
md5sum file &
[1] + 1271 suspended
pv -d 1271
417MiB 0:00:17 [12,1MiB/s] [============> ] 29% ETA 0:00:53
$ cp file.mov copy.mov &
[2] 3731
$ pv -d 3731
3:/media/windows/file.mov: 754MiB 0:00:04 [97,2MiB/s] [======================> ] 52% ETA 0:00:07
4:/media/windows/copy.mov: 754MiB 0:00:04 [97,3MiB/s] [ <=> ]
pv
не обробляє дозволи так само, якcp
і ... (на основі одного швидкого тесту, який я намагався:pv
не скопіював біт виконання поперек ..rsync
зробив.