Cp hızını ve kopyalanan yüzdesi görmek mümkün mü?


251

Nautilus kullanarak büyük dosyaları kopyalarken sorun yaşıyorum (sıkışıyor). Kopyalamam gerekiyor cp. Kopyalanan% ve aynı zamanda transfer hızını gösteren herhangi bir parametre olup olmadığını bilmek istiyorum.


39
Sen kullanabilirsiniz rsyncyerine cp. Bir --progressseçeneği var.
frostschutz

2
Midnight Commanderayrıca iyi çalışır ve ilerleme çubukları ile oldukça metin tabanlı bir UI vardır, ancak yüklenmemiş olabilir. mcKomut isteminde deneyin . Ayrıca, belli ki öyle değil cp.
CVn

3
Birlikte kullanmak rsync, --progressneler olduğunu anlamamı sağladı. % 100'e ulaştığında sıkışır ve ardından birkaç dakika sürebilir. Nautilus ile aynı olduğunu düşünüyorum. Neyse zaten başka bir soru, bu soru için en iyi cevap rsync --progress, boyut,%, hız ve geçen zaman gösterir.
yzT

2
rsync ile ilgili bir sorun, saf bir kopyadan daha yavaş çalışmasıdır. Büyük sunucumda fark sırasıyla 60 MB / s ve 300 MB / s'dir.
pdwalker

1
Pdwalker -Wseçeneği ile bile ? tüm ev sahiplerim rsyncneredeyse kadar hızlı cp... yani yakın rsyncyerine düzenli kullanıyorum cp.
Skaperen,

Yanıtlar:


193

rsyncprogress2Genel yüzdeyi gösteren bir bayrak bulunur :

rsync --info=progress2 source dest

5
--info = progress2 hala varsayılan bir depoya dönüştürmedi ve işte burası 2015. İyi bir fikir gibi görünüyor.
Lonniebiz

1
--info=progress2Sonunda dahil version 3.1.0 protocol version 31. Belki cevabınızı düzenleyebilirsiniz, yzT.
Sopalajo de Arrierez

1
--info=progress2Bu rsync'in hızlı bir şekilde alev aldığını fark ettim ! 200 MB / sn, Windows 90 MB / sn'den daha ileri giderken!
ReneFroger

1
@ReneFroger, gerçek hız olsa da (cihaza bağlı olarak), genellikle Linux'ta bu hızlı hız gerçekten yanlıştır ve kopya bittikten sonra sistem, Windows'ta cihazı çıkarabileceğinizin aksine, hala cihaza yazmaktadır. neredeyse hemen. Büyük dosyaları kopyalarsanız, bu hızlı hızda nasıl başladığını fark edebilirsiniz ancak daha sonra standart olana kadar iner.
yzT

7
sadece benim için çalıştı --progress. rsync sürüm 3.0.9
adrianTNT

103

cpElbette mümkün olandan başka araçlara izin verirseniz . Tek bir dosya için kullanabilirsiniz pv. Güzel istatistikler sağlayan küçük bir araçtır.

pv inputfile > outputfile

Birden fazla dosya veya dizin varsa tar kullanabilirsiniz:

tar c sourceDirectory | pv | tar x -C destinationDirectory

Bir kabuk fonksiyonuna sarabilirsiniz. Yazmak için daha az ve semantik olanlara yakın cp. İşte çok basit (ve hatasız değil!) Bir işlev:

cpstat () {
  tar c "$1" | pv | tar x -C "$2"
}

Bazı sürümlerin taryukarıda belirtilen sözdizimini (ör. Solaris tar) desteklemediğini ve aşağıdaki değişkeni kullanmanız gerektiğini unutmayın:

cpstat () {
  tar cf - "$1" | pv | (cd "$2";tar xf -)
}

Buna böyle diyorsun

cpstat sourceDirectory destinationDirectory

Daha da artırabilirsiniz, böylece pvkalan zamanın bir tahminini sağlar.

Başka bir çözüm (bir yorumda belirtilen frostschutz gibi) --progressseçeneği ile rsync kullanmaktır :

rsync --progress -a sourceDirectory destinationDirectory

1
cpstat pastebin içine gidiyor =)
Matt

7
Bu size ETA'yı değil transfer hızını verecek, çünkü pvborudan ne kadar veri geleceğini bilmiyor. Bunu kullanarak belirleyebilirsiniz -s. Örneğin ilk yapmak du -sh sourceDirectorybir (kaba) fikir edinmek için ve sonra onu geçmek pvbu gibi: pv -s 100m.
Jan Fabry

1
--info = progress2 size dizin seviyesi ilerleme istatistiklerini verir.
AlexLordThorsen

vbuf(debian, ubuntu) pvmuhtemelen sanal halka tampon belleğinden dolayı biraz daha hızlıdır
Skaperen

@Skaperen bilmiyorum vbuf. Ancak, şu anda Debian'da göründüğü gibi görünüyor ve bu nedenle genellikle Debian'ı kararlı bir şekilde çalıştıran Sunucularda bulunmuyor.
Marco

58

rsync kopyalama işlemi boyunca ilerlemeyi göstermek için en iyi şekilde çalışır.

örn:

rsync -avh --progress sourceDirectory destinationDirectory

27

Diğer cevaplarda açıklandığı gibi, cp bu işlevi sağlamıyor. Ancak, ilerleme (eski adıyla cv) bu eksik özelliği sağlamada çok yardımcı olan küçük bir araçtır.

Bu araç, sisteminizde çalışmakta olan coreutils temel komutlarını (cp, mv, dd, tar, gzip / gunzip, cat, ...) arayan ve kopyalanan yüzdeleri görüntüleyen Tiny Dirty Linux Only * C komutu olarak tanımlanabilir. veri.

Son birkaç aydır kullanıyorum ve sağlam.


tüm dosya sistemleriyle (örn. cif) çalışmıyor gibi görünüyor, ancak +1, böyle çılgınca bir çıkış olduğunu bilmiyordu
akostadinov 8:15

1
Bu projenin şimdi "progress - Coreutils Progress Viewer (eski adıyla cv)" olduğunu unutmayın.
chappjc

17

Cp hızını ve kopyalanan yüzdesi görmek mümkün mü?

Evet, cpterminaldeki komutun ilerlemesini görüntülemek mümkündür .


Yöntem 1: (kullanım progress)

Yeni bir terminal açın ve aşağıdaki gibi komutun ve diğer komutların progressilerlemesini gösterecek şekilde cpyazın:

cp, mv, dd, tar, cat, rsync, grep, fgrep, egrep, cut, sort, md5sum, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum, adb, gzip, gunzip, bzip2, bunzip2, xz, unxz, lzma, unlzma, 7z, zcat, bzcat, lzcat, split, gpg

Eğer yüklemediyseniz progress, içeri örneğin deposundan yükleyebilirsiniz CentOSbu komutla: yum -y install progress.

Sonra cparka planda komut çalıştırdıktan sonra veya cpnormal çalıştırdıktan sonra başka bir terminal açın, bu yüzden sadece şu komutu deneyin:

# progress -m

Çıktıya bakınız:

[30904] cp /home/user/file.mp4
        2.3% (200.9 MiB / 8.4 GiB) 3.6 MiB/s remaining 0:38:58

Yöntem # 2: (düzeltme ekini kullan cp)

Veya GNU’yu indirin coreutilsve düzeltin.

cd /tmp
wget http://ftp.gnu.org/gnu/coreutils/coreutils-8.21.tar.xz
tar -xvJf coreutils-8.21.tar.xz
cd coreutils-8.21
wget https://raw.githubusercontent.com/atdt/advcpmv/master/advcpmv-0.5-8.21.patch
patch -p1 -i advcpmv-0.5-8.21.patch

Çalıştırmak:

export FORCE_UNSAFE_CONFIGURE=1
./configure
make

İki dosyayı cpve mvaltında loacated coreutils-8.21/src/için /usr/local/bin:

cp src/cp /usr/local/bin/cp
cp src/mv /usr/local/bin/mv

Veya dosya yöneticinizi root olarak kullanarak kopyalayın.

Aşağıdaki satırları kendinize ekleyin ~/.bashrc:

alias cp='cp -gR'
alias mv='mv -g'

Çıkış Yap ve Giriş Yap

İlerleme çubuğu , Yazar tarafından –gveya –progress-barönerilmeyen şekilde görüntülenebilir.

Çıktıya bakınız:

0 files copied so far...                                              194.4 MiB /   8.4 GiB
[||--------------------------------------------------------------------------------]  2.3 %
Copying at   3.3 MiB/s (about 0h 5m 47s remaining)
/home/user/file.mp4                                                   194.4 MiB / 446.1 MiB
[||||||||||||||||||||||||||||||||||||----------------------------------------------] 43.6 %

Kaynak: linuxhelp


1
Bu cpyamanın gerçek kaynağı gibi görünüyor : web.archive.org/web/20131115171331/http://beatex.org/web/…
Kaushal Modi

1
progressEmir hakkında ipucu için +1
Peter

Bu tek gerçek cevap
Alessio

14

Bu ilanın biraz eski olduğunu fark ettim. Ancak eldeki konuya bir çözüm yaparken, çözümümü yayınlayacağımı düşündüm.

Senaryo: Kopyalamak istediğimiz çok büyük bir dizin yapısına sahibiz, bu yüzden bir terminal penceresinde cp -R sourcedir destdir komutunu veriyoruz.

Başka bir terminal penceresi açın veya işlemi arka plana itin (Ctrl+Z,bg<CR>), sonra getto yolunda bir ilerleme göstergesi yapalım:

Öncelikle kopyalamak istediğimiz dizin yapısının toplam büyüklüğünü alırız:

du -sh /path/sourcedirectory/

Sonucu gigabaytlara (G) dönüştürün, daha sonra n değişkenini değişken değişkeninde aldığınız sonuçla değiştirin. Sourcesize ve destdir (hedef dizini) ekledikten sonra aşağıdaki komutu çalıştırın.

while true; do sourcesize=n destdir=/path/destinationdirectory/ copyprogress="$(export | du -sh $destdir | awk '{print $1}' | sed 's/[^0-9.]*//g' )" ; echo "scale=3 ; $copyprogress / $sourcesize * 100" | bc | xargs echo -n ; echo % completed ; sleep 10 ; done

Bu, aşağıdaki gibi iletilerle ilerlemeyi 10 saniyede bir basar:

0.100% completed
0.200% completed
0.300% completed 
... etc

Bu çözümün kopyalama hızına hitap etmediğini biliyorum, ancak yukarıdaki komutları genişleterek, muhtemelen bir bash betiğine dönüştürerek bunu okumak daha kolay olacak şekilde eklemek mümkün olabilir. Örneğin, ne kadar verinin kopyalandığını kontrol ederek pr. Zaman birimi n, hız hesaplamak ve görüntülemek için önemsiz olmalıdır.


Bu benim kullanım durumum için mükemmel, bu yüzden gönderdiğiniz için teşekkür ederiz! Sadece bir dosya değil, binlerce dosya içeren büyük bir dizini kopyalamanın ilerleyişini bilmek istiyorum, bu yüzden diğer çözümler bana gerçekten yardımcı olmuyor.
Ibrahim,

Bu, özellikle şu an yaşadığım durumlar için harika: Uzaktan, terrabayt yedekleme işlemlerini bir depolama havuzundan diğerine taşımak için önceden etkileri düşünmeden uzaktan büyük bir mv işine başladı. Şimdi süreci kolaylıkla arka plana çıkarabilir ve içine göz atabilirim. Korku veren!
Riley,

8

Marco'nun cevabını geliştirmek için bugün bu versiyonunu yazdım cpstat, böylece birçok dizini kopyalayabilir ve son parametreyi hedef yolu olarak kullanabilirsiniz. Kaynak olarak göreceli bir derin yol kullanırsanız tar, aynı bağımlı dizin ağacını otomatik olarak oluşturabileceğinizi unutmayın.

function cpstat () {

    tar -cf - "${@: 1: $#-1}" |
    pv -s "$( du -cs -BK --apparent-size "${@: 1: $#-1}" |
              tail -n 1 |
              cut -d "$(echo -e "\t")" -f 1)" |
    ( cd "${@: $#}"; tar -xf - )

;}

6

Standart sürümünde değil cp.

Yapabilirsin arka plan cp ve listelemek için beklerken boyutunu cpbitirmek için.

Tek bir dosyanın gelişimini izlemek için bu perl'i kullanıyorum ancak harici olarak cp'ye çalışıyor (ya da başka bir şey yapıyorum)



5

rsyncBazı ilerleme istatistikleri vermiş olsanız bile , bir ilerleme çubuğu istiyorsanız kullanmanız gerekir pv.

Sen kullanabilirsiniz cpv, bir sarmalayıcı pvo daha benzer, daha kolay bir sözdizimi ile cpkendinizin kullanabileceği için yinelemeli dizinleri kopyalamak

görüntü tanımını buraya girin

Buradan alabilirsiniz


İpucu için +1 pv. Güzel bul!
Peter,

4

Gibi bir araç mc(gece yarısı komutanı) kullanarak diğer cevaplar için iyi bir alternatif seçenek olabilir.

Size ilerleme / kopyalama işlemini gösteren basit bir dosya yöneticisidir.



4

Başka basit bir çözüm sadece etmektir seyretmek aşağıdaki gibi çıkış klasörü:

Linux / Cygwin: watch -n 10 --differences du -sk --apparent-size <WATCHED_FOLDER>

FreeBSD: gnu-watch -n 10 --differences du -sk <WATCHED_FOLDER>

Bu kullanışlı hizmet programı çalışacak duve farklılıkları vurgulayacaktır.

Diğer bir olası çözüm du, verim hakkında kaba bir tahminde bulunan , çağıran, çağıran ve tüküren basit bir senaryo yazmak olacaktır .


3

Bu araç, sisteminizde çalışmakta olan coreutils temel komutlarını (cp, mv, dd, tar, gzip / gunzip, cat vb.) Arayan ve kopyalanan verilerin yüzdesini gösteren bir Linux yardımcı programı komutudur.

https://github.com/Xfennec/cv


1
Bu zaten AmmMostafa tarafından Kasım '14'te önerilmiştir.
Dubu

2

Sadece alıcı dosya sistemindeki bir FUSE hatası nedeniyle cp'nin az çok engellendiği bir durum vardı.

Sadece cp'den geçemiyorsanız (yani --sparse = her zaman) ve ilerleme için gerçekten güvenilir bir şey istiyorsanız, / proc yoluyla gidin.

Every 2.0s: cat /proc/20977/io                                                      Thu Sep 28 04:08:57 2017

rchar: 268573800
wchar: 268500992
syscr: 4112
syscw: 4097
read_bytes: 268697600
write_bytes: 0
cancelled_write_bytes: 0

0

VCP - curses arayüzündeki dosyaları kopyala (Linux'ta İlerleme Çubuğunu Göster).

AÇIKLAMA: vcp curses arayüzündeki dosyaları ve dizinleri kopyalar ve yalnızca metin çıktılarını sağlar. seçenekleri ve çıktıları, bazı yeni özellikler eklerken BSD'nin cp'sine benzer.

Bu konuda bilgi sağlar:

  • dosyalar kopyalandı ve kopyalanacak
  • veri yazılmış ve toplam veri büyüklüğü
  • veriler her saniye yazılıyor
  • biri durum dosya durumunu gösteren iki durum çubuğu, diğer toplam durum (1 dosya hariç, her ikisi de geçerli olan) ve yüzde

çıktı konsola gönderildiğinde:

  • durum çubuğu
  • kopyalanan boyut ve hız

VCP adam sayfası: https://linux.die.net/man/1/vcp

Vcp-2.2.tar.gz adresinden indirin:

http://distfiles.gentoo.org/distfiles/vcp-2.2.tar.gz

Bağımlılık: curses.h (libncurses-dev).

Ubuntu'da şunu yükleyin:

sudo apt-get install libncurses-dev

veya

sudo apt-get install libncurses5-dev

Vcp KURULUMU:

make && make install

Manuel:

man vcp
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.