інформація про хід виконання через pv для копіювання каталогу


14

Мені потрібно скопіювати дуже великий каталог (тут говорять терабайти) і хочу контролювати хід.

Я виявив, що pvце приємна утиліта, але як я можу використовувати її для рекурсивного копіювання каталогів? ( pv src > dstне працює, оскільки це каталоги)

PS: Запуск на OS X Mountain Lion, pvбув встановлений з Mac Ports

Відповіді:


21

Використовуйте rsync --progress [SRC] [DST]

Перевірте man rsyncсторінку, оскільки на ній є дуже багато корисних варіантів. -aдля архіву це гарний початок, але це залежить від ваших точних вимог.

Копіювання через трубу зайве уповільнить процес копіювання, особливо якщо це файли.


Чому копіювання через трубу сповільнить процес? Буферизація, що забезпечується трубами, і багатозадачність, пов'язана з трубами, ймовірно, допоможуть питанням, які я б сказав. (і rsync є багатопроцессорним і використовує труби внутрішньо IIRC). Що таке процес копіювання, який не заснований на файлах?
Стефан Шазелас

Баш зручний, але не швидкий. Особливо під час передачі однієї команди до іншої.
jippie

@StephaneChazelas: Тому що буфер труби становить лише 8 КБ. Така програма, як rsync, можливо, хоче використовувати значно більший внутрішній буфер.
Зан Лінкс

10

Ви можете використовувати tarабо paxчи cpio:

mkdir -p dst &&
  (cd src && tar cf - .) | pv -trb | (cd dst && tar xpf -)

1
Крім того, ви можете додати vдо tarкоманди, щоб побачити імена файлів.
петерф

Отже, це зашпаркує вихідну папку, перш ніж зробити копію, правда? Моя папка має 5 ТБ, тому я не впевнений, чи це найкращий спосіб зробити це? Мені дуже подобається використовувати pv, оскільки він показує дійсно гарний прогрес статус, будь-яку пораду, будь ласка?
Так

@Tak, ні, він нічого не копіює, оскільки немає стиснення. tar cf -виводить потік, що містить файли та їх метадані, який подається через трубопровід до pv, який подає його недоторканим до іншого tarпід час друку індикатора прогресу, а інший tarвилучає дані з цього потоку. Усі три команди працюють одночасно і обробляють дані по мірі їх надходження, нічого не зберігається на диску, немає нічого, що зберігається в пам'яті, крім буферних труб і внутрішніх буферів команд, що становить лише кілька кілобайт.
Стефан Шазелас

@ StéphaneChazelas Дякую за коментар. Я спробував це, і це працює, єдине, що на панелі прогресу не відображається очікуваний відсоток, який він продовжує рухатись зліва направо. Будь-яка ідея чому? Я використав pv з цими параметрами -petra, який зазвичай показує панель прогресу, де бар продовжував заповнюватися, поки не закінчиться. Я також підтримав вашу відповідь.
Так

@Tak, pvне має можливості дізнатися, скільки даних можна передати. Якщо у вас є кошторис цієї суми, ви можете передати її на -sвибір за допомогою опції (GNU du -sb srcдасть вам хороший наближення, якщо файли досить великі)
Stéphane Chazelas

2

Дьоготь.

tar -cf - /var/log/ | pv | tar -C . -x

Приклад:

# tar -cf - /var/log/ | pv | tar -C . -x
tar: Removing leading `/' from member names
58MB 0:00:05 [ 2.2MB/s] [                   <=> 

1

Ось кілька команд для копіювання каталогів з інформацією про хід.


Якщо є багато невеликих файлів:

cp -av sourcedir targetdir | pv -l -s filecount > logfile

Це повідомить про прогрес на основі кількості копіюваних файлів.

Ви можете переспрямувати, /dev/nullякщо вам не потрібно logfile.

Використовуйте таку команду, щоб отримати filecount:

find sourcedir | wc -l

Якщо є кілька величезних файлів:

tar c sourcedir | pv -s size | tar x -C targetdir

Це повідомить про прогрес на основі скопійованих байтів.

targetdir повинні існувати.

Використовуйте таку команду, щоб отримати size:

du -sh sourcedir

Якщо ви хочете використовувати rsync:

rsync -ai sourcedir/ targetdir/ | pv -l -s filecount > logfile

Отримайте, filecountяк показано вище.

Якщо ви копіюєте в одній і тій же системі, rsync -aце практично те саме, що і ви cp -a. Переваги rsync полягає в тому, що ви копіюєте по мережі або оновлюєте (або порівнюєте) попередню копію.

Детальніше дивіться тут:


0

Під du -b /directory/час виконання звичайної команди копіювання ви можете робити і джерело, і місце призначення, і порівняйте ці дві. Це настільки ж ефективно і не уповільнює процес копіювання, просуваючи його через трубу.


-1
find source-dir -print0 | xargs -0 -I % pv % > dest-dir/%

3
Поясніть, будь ласка, тур на солютіпон, ви хочете, щоб ОП змогла його провести (і навчитися)
vonbrand
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.