Cp ile dosyaları kopyalarken aktarım ilerlemesi ve hızı nasıl gösterilir?

274

Aksi takdirde, bunu başarabilecek alternatif bir komut satırı yardımcı programı var mı?

    
sordu Olivier Lalonde 14.12.2010 05:48

15 cevap

204

cp bu işlevselliğe sahip olmasa da, bunu yapmak için pv kullanabilirsiniz:

pv my_big_file > backup/my_big_file

Not: Bu yöntem, dosyanın izinlerini ve sahipliğini kaybeder. Bu şekilde kopyalanan dosyalar, kendiniz oluşturmuşsunuz ve size ait olacakmış gibi aynı izinlere sahip olacaktır.

Bu örnekte, pv temel olarak dosyayı > işlecini kullanarak bir dosyaya yönlendirdiğiniz stdout * dosyasına gönderir. Eşzamanlı olarak, bunu yaptığınızda terminalde ilerleme hakkında bilgi yazdırır.

Göründüğü gibi:

[email protected]:~/Data$ pv my_big_file > backup/my_big_file
 138MB 0:00:01 [73.3MB/s] [=================================>] 100% 

pv yükle (alternatif olarak, sudo apt-get install pv yazın) sisteminizde.

*: Teknik bit

Unix benzeri bir sistemde üç önemli veri akışı vardır: stdout (standart çıktı), stderr (standart hata) ve stdin (standart giriş). Her programın üçü var, yani konuşmak için. % Co_de% yönlendirme operatörü program çıktısını bir dosyaya yönlendirir. Bağımsız değişkenler olmadan, yukarıda gördüğünüz gibi, > bir programın standart çıktısını bir dosyaya yönlendirir. > temel olarak daha meraklı bir şey yapmıyor

cat source > destination

( cp dosyası sadece bir dosyayı okur ve stdout'a yazdırır). cat tıpkı kedi gibi, ancak çıktı akışını başka bir yere yönlendirirseniz, ilerleme bilgisini bunun yerine stdout'a yazdıracaktır.

Bu konuda daha fazla bilgi edinmek için pv 'a bir göz atın.

DoR , bu yanıtta önerir , bunun yerine rsync kullanmaktır:

$ rsync -ah --progress source-file destination-file
sending incremental file list
source-file
        621.22M  57%  283.86MB/s    0:00:01

Bu, ilerlemeyi gösterirken dosya izinlerini / sahipliğini koruyacaktır.

    
verilen cevap Stefano Palazzo 14.12.2010 06:17
130

Yok. Nedeni hakkında burayı görün. İhtiyacınız olandan fazlasını yapsa da, rsync'in --progress parametresiyle bir tane vardır. -A izinleri vb. Tutacak ve -h insan tarafından okunabilir olacaktır.

rsync -ah --progress source destination

Çıktı şunun gibi görünecek:

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)
    
verilen cevap bartekbrak 15.10.2012 10:06
84

Dosyalarınızın doğru bir şekilde aktarıldığını görmek istiyorsanız, gcp ve gcp cp gibi kullanabilirsiniz, ancak varsayılan olarak size kopyalananı görebilmeniz için size bir ilerleme çubuğu verir. Programın wiki notları , gcp gibi çeşitli yararlı özellikleri vardır.

  
  • ilerleme göstergesi aktar
  •   
  • hata durumunda sürekli kopyalama (sonraki dosyaya atla)
  •   
  • durum kaydı kopyalama: gcp tüm işlemlerini kaydeder, böylece hangi dosyaların başarıyla kopyalandığını bilmek mümkün olur
  •   
  • hedef dosya sistemi sınırlamalarını işlemek için adlandırma adı (örneğin, FAT'de "*" veya "?" ile uyumsuz karakterler silinmesi)
  •   

Ancak, araç kullanılırken ilerleme çubuğu% 100'e ulaşmış olsa bile, aktarım işleminin başarıyla tamamlandığından emin olmak için medyayı güvenli bir şekilde çıkarmadan önce terminal sorgunuzun yeniden görünmesini beklemeniz gerekir.

gcp , dosyaları kopyalamak için kullanılır ve --preserve gibi seçeneklere sahiptir, böylece çeşitli öznitelikler ve izinler korunabilir ve tüm dizinlerin kopyalanabilmesi için --recursive . Seçenekleri hakkında daha fazla bilgi man gcp girilerek veya Ubuntu manpages adresine giderek bulunabilir. Online . Bir öğretici de bu sitede kullanılabilir.

gcp 'yi depolardan

ile yükle
sudo apt-get install gcp

( Not : Ubuntu 12.10'da yeni otomobil noktası, örneğin, /media/user/usbdisk )

Girerek medyaya bir dosya kopyalayabilirsiniz

gcp /home/mike/file.mp4 /media/usb

ile medyaya bir klasör kopyalayın

gcp -rv ~/Podcasts /media/Mik2

İlerleme çubuğu ile gcp örnek çıktı:

gcp ~/Videos_incIplayer/mars.flv /media/Mik2
Copying 168.57 MiB 100% |########################################################|   7.98 M/s Time: 00:00:22

Tabiki diske kopyalamak için birden çok dosya veya klasör belirtebilirsiniz ve man gcp 'de kapsanan birçok seçenek var.

    
verilen cevap user76204 15.10.2012 13:09
54

Bu tam amaç için cURL'yi kullanıyorum. Man sayfası, "FILE" protokolünü desteklenen şekilde listeler, bu yüzden bir URL'deki diğer protokoller gibi kullanın:

curl -o destination FILE://source

Hız, ilerleme, kalan süre ve daha fazlası - hepsi tanıdık bir biçimde.

    
verilen cevap mathemagician 02.02.2013 10:00
22

Hız göstermezken, birden fazla dosya kopyalarken, -v seçeneğinin cp komutuyla ilerleme bilgisi sağlanır. örn.

cp -rv old-directory new-directory
    
verilen cevap Ubuntourist 14.12.2010 18:17
19

Çekirdek, hız ve çoğu zaman da yüzde gibi verilerin çoğunu bilir. Modern çekirdekler bunu / proc dosya sistemi aracılığıyla ortaya çıkarır.

İşte 'den gösterilen şema bu bilgiyi kullanır. Çalışmakta olan programlara ekleyebilir ve aşağıdaki gibi düzenli güncellemeler yapabilir:

$ 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)
...
    
verilen cevap Jürgen Weigert 25.02.2014 15:34
11

pv , cp görevlerini yerel olarak ele alabilirken dd pv değerini kullanarak hem yerel ( cp ) hem de uzak ( scp ) görevleri ele alabilir.

dd if=path/to/source.mkv | pv | dd of=path/to/dest.mkv

Lütfen path/to/dest.mkv çıkışının touch path/to/dest.mkv

olduğundan emin olun.

Bu işlem ilerlemeyi gösterebilir, ancak yüzde bilgisini istiyorsanız,

dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv

Yukarıdaki 100M dosyasını kaynak dosyanızın gerçek boyutuyla değiştirin.

İşte Uzak Parçası Var

scp mevcut ilerlemeyi neredeyse gösteremese de, dd pv ile bir parça kek kullanıldı.

ssh [email protected] dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv
    
verilen cevap onemach 05.01.2013 09:08
10

Çalışan komutla ilgili herhangi bir tanımlayıcı bulabilen ve ilerleme ve hız gösteren cv adında yeni bir araç var: İşte

cv -w

tüm çalışan cp, mv vb. işlemlerin istatistiklerini verir.

    
verilen cevap naugtur 13.07.2014 13:33
10

Depolarda, farklı komutları inceleyebilen ve bunlar için ilerleme bilgisi görüntüleyebilen progress adlı bir araç var.

Komutu kullanarak yükleyin

sudo apt-get install progress

Bu araç şöyle kullanılabilir:

cp bigfile newfile & progress -mp $!

Çıktı:

[11471] cp /media/Backup/Downloads/FILENAME.file 
        29.9% (24.2 MiB / 16 MiB)
    
verilen cevap Nathaniel A Malinowski 27.09.2016 00:35
6

Birçok kişi dediği gibi, cp bu işlevselliği içermez.

Sadece 0,02 dolarımı atmak için, genellikle önemsiz kopyalama durumları ile yaptığım şey (yani -R yok):

  1. Dosyanın ne kadar büyük olduğunu hatırlayın

  2. Kopyalamaya başla

  3. Başka bir terminali aç

  4. Hedefin bulunduğu dizinde watch ls -lh DIR dosyasını çalıştırın

Bu, hedef dosya boyutunda beni güncel tutabilir ve en az güçlükle.

Daha az önemsiz durumlara alternatif olarak, örn. Yinelenen dizinleri kopyalayarak, DIR boyutunun özetini görmek için watch du -hs DIR kullanabilirsiniz. Ancak, hesaplamak uzun sürebilir ve hatta kopyalamayı yavaşlatabilir, bu yüzden işlem yapmak için kabul edilebilir -n INTERVAL argümanı kullanmak isteyebilirsiniz.

Güncelleme: Örneğin, watch du ile kullanılan komutla birlikte vahşi kartlar kullanırsanız, ör. watch du -hs backup/* , alıntı yapmayı unutmayın:

watch "du -hs backup/*"

aksi halde, joker karakterler başlatıldığında başlatılır , böylece yeni dosyalar / alt dizinlere bakılmaz.

    
verilen cevap Alois Mahdal 16.11.2012 14:20
4

dd status=progress

Seçenek, GNU Coreutils 8.24+ (Ubuntu 16.04) sürümüne eklendi:

dd if=src of=dst status=progress

Stdout, periyodik olarak güncellenmiş bir çizgi:

462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s

Ayrıca bkz: Gg'nin ilerlemesini nasıl izlersiniz?

    
3

Ne yapmak istediğinize bağlı olarak, Midnight Commander ( mc ) yanıt olabilir. Şimdiye değinilmediğine şaşırdım.

pv veya rsync gibi araçlar, devasa bir dosyanın aktarımının ilerlemesini göstermek için iyidir, ancak tüm dizinleri / ağaçları kopyalamaya geldiğinde, mc , boyutu hesaplar ve ilerlemeyi çok güzel görüntüler. Ayrıca sistemlerin çoğunda kutudan çıkarılabilir.

    
verilen cevap kralyk 30.01.2016 18:33
2

Bir kabuk komut dosyası kullanın:

#!/bin/sh
cp_p()
{
   strace -q -ewrite cp -- "" "" 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' "") count=0
}

Bu şöyle görünecek:

% cp_p /home/echox/foo.dat /home/echox/bar.dat
66% [===============================>                      ]

Kaynak

    
verilen cevap Jan 01.09.2014 15:45
2

Eğer rsync 3.1 veya üstü ( rsync --version ) varsa, izinleri ve sahipliğini koruyarak, dizinleri tekrarlamayınca, "hayır clobber" yazarken (cp -Rpn) kopyalayabilir ve genel ilerlemeyi görüntüleyebilirsiniz (sadece dosyaya göre ilerlemek yerine) , kopya oranı ve (çok kaba) tahmini süre:

sudo rsync -a --info=progress2 --no-i-r /source /destination

Sudo'nun yalnızca sahip olmadığınız dizinlerle / dosyalarla ilgileniyorsa gerekli olduğunu unutmayın. Ayrıca, --no-i-r olmadan, yüzde, kopya sırasında bir noktada daha düşük bir sayıya sıfırlanabilir. Belki de daha sonraki rsync sürümleri info = progress2 ile no-i-r değerine ayarlanacaktır, ancak 3.1.2'nin geçerli sürümünde yoktur.

Zaten dosyaların içerdiği bir dizine (örneğin, cp -n "no clobber" kullanıldığında olduğu gibi) kopyalanırken kalan yüzde ve kalan sürenin çok büyük olduğunu tahmin ettim.

    
verilen cevap S Lentz 02.03.2016 23:22
0

Herhangi bir programı kopyalayabilirsiniz. Aynı zamanda, sudo iotop 'yi başlatabilir ve gerçekte disk okuma / yazma hızını henüz ilerleme olmadan görebilirsiniz.

    
verilen cevap McKelvin 11.01.2018 16:47

Etiketlerdeki diğer soruları oku