Aksi takdirde, bunu başarabilecek alternatif bir komut satırı programı var mı?
Aksi takdirde, bunu başarabilecek alternatif bir komut satırı programı var mı?
Yanıtlar:
İken cpbu işlevi sahip değil, sen kullanabilirsiniz pvbunun için:
pv my_big_file > backup/my_big_file
Not: Bu yöntem, dosyanın izinlerini ve sahipliğini kaybedecektir. Bu şekilde kopyalanan dosyalar, siz kendiniz oluşturmuş ve size ait olacak gibi aynı izinlere sahip olacaktır.
Bu örnekte, pvtemel olarak sadece >operatörü kullanarak bir dosyaya yönlendirdiğiniz stdout * dosyasına çıktı verir . Aynı zamanda, bunu yaptığınızda terminale ilerleme hakkında bilgi basar.
Göründüğü gibi:
stefano@ubuntu:~/Data$ pv my_big_file > backup/my_big_file
138MB 0:00:01 [73.3MB/s] [=================================>] 100%
Sisteminize pv (alternatif olarak, tür
sudo apt-get install pv) yüklemeniz gerekebilir .
*: Teknik bit
Unix benzeri bir sistemde üç önemli veri akışı vardır: stdout (standart çıktı), stderr (standart hata) ve stdin (standart girdi). Konuşmak için her programın üçü de var. >Yönlendirme operatörü bir dosyaya programı çıkış yönlendirir. Argümanlar olmadan, yukarıda gördüğünüz gibi, >bir programın standart çıktısını bir dosyaya yönlendirir. cptemelde daha fazla meraklısı bir şey yapmaz
cat source > destination
( catsadece bir dosyayı okur ve onu stdout'a basar). pvtıpkı kedi gibidir, ancak çıkış akışını başka bir yere yönlendirirseniz, bunun yerine ilerleme bilgisini stdout'a basar.
man pvDaha fazla bilgi edinmek için göz atın .
DoR'nin bu cevabın önerdiği gibi başka bir seçenek de 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.
alias cp="rsync -avz"cp güncel değil.
pv, aramaya devam edebilir /proc/PID of cp/fdve /proc/PID of cp/fdinfoilerlemeyi anlayabilirsiniz. (Hızı anlamak size kalmış.) İzlemek için bu tekniği kullanıyorum updatedb.
-zmuhtemelen sadece ağ kopyaları için kullanılmalıdır; Yerel bir kopyaya ait verilerin sıkıştırılması ve sıkıştırılması, baştan sona safdır.
rsynciz eklememeye dikkat edin /(ya da örneğin bash tamamlaması otomatik olarak oraya koyarsa kaldırın). Aksi takdirde cp(veya gcp) kullandığınızdan farklı sonuçlar alırsınız .
Yok. Neden olarak buraya bakınız . İhtiyacınız olandan daha fazlasını yapabilmesine rağmen rsync, bir --progressparametresi vardır. -aVb izinleri, tutacak ve -hokunabilir insan olacaktır.
rsync -ah --progress source destination
Çıktı şöyle 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)
-rdizinleri tekrarlamak için bayrağını da destekler . Hatta cp için doğrudan bir yedek olarak takma olabilir:alias cp="rsync -ah --progress"
--progresskafamın dönmesini sağlıyor. Böylece, buraya AOL anahtar kelime aramalarından gelenler rsync -ah --info=progress2 [source] [destination] , çıktıyı biraz daha mantıklı bir şekilde IMHO şeklinde sunarlar.
Eğer dosyaları düzgün kullanabilirsiniz transfer olup olmadığını görmek istiyorsanız gcpve gcpcp gibi ama kopyalanan ne görebilmesi için varsayılan olarak size bir ilerleme çubuğu verir. Programın wiki'nin belirttiği gibi gcp, birçok yararlı özelliğe sahiptir.
- transfer ilerleme göstergesi
- hata üzerine sürekli kopyalama (bir sonraki dosyaya geç)
- kopya durumu günlüğü: gcp, hangi dosyaların başarılı bir şekilde kopyalandığını bilmek mümkün tüm eylemlerini kaydeder.
- Hedef dosya sistemi sınırlamalarını işlemek için isim yönetimi (örneğin, FAT üzerindeki "*" veya "?" uyumsuz karakterlerin silinmesi)
Ancak, aracı kullanırken ilerleme çubuğu% 100'e ulaşmış olsa bile, aktarma işleminin başarılı bir şekilde tamamlanmasını sağlamak için ortamınızı güvenli bir şekilde çıkarmadan önce terminal isteminizin yeniden görünmesini beklemelisiniz.
gcpdosyaları kopyalamak için kullanılır ve --preserveçeşitli özelliklerin ve izinlerin korunabilmesi ve --recursivetüm dizinlerin kopyalanabilmesi için seçenekler vardır. Seçenekleriyle ilgili daha fazla bilgi, çevrimiçi olarak Ubuntu man sayfalarına girerek man gcpveya bu sayfalara giderek bulunabilir . Bu sitede bir öğretici de bulunmaktadır .
İle gcpdepolardan yükleyin
sudo apt-get install gcp
( Not : Yeni automount noktası, örneğin, Ubuntu 12.10'da, /media/user/usbdisk)
Bir dosyayı girerek ortamınıza kopyalayabilirsiniz.
gcp /home/mike/file.mp4 /media/usb
ve bir klasörü medyanıza kopyalayın.
gcp -rv ~/Podcasts /media/Mik2
gcpİlerleme çubuğu ile gelen örnek çıktı :
gcp ~/Videos_incIplayer/mars.flv /media/Mik2
Copying 168.57 MiB 100% |########################################################| 7.98 M/s Time: 00:00:22
Elbette, diskinize kopyalamak için birden fazla dosya veya klasör belirleyebilirsiniz ve içinde kapsanan birçok seçenek vardır man gcp.
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NotSupported: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
export DISPLAY=:0.0gcp'ye başlamadan önce ayarlayabilirsiniz . Makine başsız ise, sanal çerçeveye veya başka bir şeye xsession başlatmak zorundasınız, bu noktada muhtemelen başka bir program aramanız gerekir
gcpoldukça iyi ama DBUS / X gereksinimi garip. Bunu SSH üzerinden ssh yönlendirme kullanarak yaptım: ssh -X user@hostbu da çalıştırmama izin verdi.
Bu amaç için cURL kullanmaya başladım. 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.
pv.
Hız göstermiyor olsa da, birden fazla dosya kopyalarken -v, cpkomuta ilişkin seçenek size ilerleme bilgisi sağlayacaktır. Örneğin
cp -rv old-directory new-directory
Çekirdek, hız ve çoğu zaman yüzde gibi verilerin çoğunu bilir. Modern çekirdekler bunu / proc dosya sistemiyle gösterir.
https://github.com/jnweiger/showspeed adresinden showpeed bu bilgiyi kullanır. Zaten çalışan programlara ekleyebilir ve bunun gibi periyodik güncellemeler verebilir:
$ 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 ddiçin başka bir terminal de kullanabilirsiniz dd, başka bir seçenek de watch -n 1 pkill -USR1 ddperiyodik olarak ilerlemesini göstermek (her saniye).
Depolarda adı verilen progressve farklı komutları inceleyebilen ve bunlar için ilerleme bilgilerini görüntüleyebilen bir araç vardır .
Komutu kullanarak yükleyin
sudo apt-get install progress
Bu araç şu şekilde kullanılabilir:
cp bigfile newfile & progress -mp $!
Çıktı:
[11471] cp /media/Backup/Downloads/FILENAME.file
29.9% (24.2 MiB / 16 MiB)
İken pvyerel başa çıkabilirim cpkullanarak, görevleri ddile pvhem yerel (başa çıkabilirim cp) ve uzak ( scp) görevleri.
dd if=path/to/source.mkv | pv | dd of=path/to/dest.mkv
Lütfen path/to/dest.mkvçıkışların tarafından yapıldığından emin oluntouch path/to/dest.mkv
Bu ilerlemeyi gösterebilir, ancak yüzde bilgisini istiyorsanız,
dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv
100MYukarıda kaynak dosyanızın gerçek boyutuyla değiştirin .
İken scppek uygulayarak geçerli ilerleme gösterebilir ddile pvçocuk oyuncağı olduğunu.
ssh onemach@myotherhost dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv
Çalışan bir komutla ilgili herhangi bir tanımlayıcıyı bulabilen ve ilerleme ve hız gösterebilen yeni bir araç var: https://github.com/Xfennec/cv
cv -w
Tüm çalışan cp, mv vs. işlemleri için istatistikleri çıkarır.
watch cv -qdaha temiz
cp, a'nın bir dizini yinelemeli olarak kopyalayıp kopyalamadığını fark eder .
Birçok kişinin dediği gibi cp bu işlevi içermez.
Sadece 0,02 $ 'lık bir miktar atmak için, genellikle önemsiz kopyalama durumlarında ne yapacağımı (yani hayır -R):
Dosyanın ne kadar büyük olduğunu görün ve hatırlayın
Kopyalamaya başla
Başka bir terminal aç
watch ls -lh DIRHedefin bulunduğu dizinde koş
Bu beni asgari güçlükle hedef dosya boyutunda güncel tutabilir.
Daha az önemsiz durumlar için bir alternatif olarak, örneğin dizinleri tekrar tekrar kopyalama watch du -hs DIR, DIR boyutunun özetini görmek için kullanabilirsiniz . Bununla birlikte, du'nun hesaplanması uzun sürebilir ve kopyalamayı yavaşlatabilir, bu -n INTERVALnedenle takas işleminin kabul edilebilir olması için izlemek için argümanı kullanmak isteyebilirsiniz .
Güncelleme: Watch du ile kullanılan komutlu joker karakterler kullanıyorsanız, örneğin watch du -hs backup/*, alıntı yapmayı unutmayın:
watch "du -hs backup/*"
Aksi halde joker karakterler sadece bir kez genişletilir , saat başlatıldığında yeni dosyalar / alt dizinlere bakılmaz.
dd status=progress
GNU Coreutils 8.24+ sürümüne eklenen seçenek (Ubuntu 16.04):
dd if=src of=dst status=progress
Terminal bir tür çizgi gösterir:
462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s
Ayrıca bakınız: dd'nin ilerlemesini nasıl izlersiniz?
Rsync 3.1 veya higher ( rsync --version) kullanıyorsanız, izinleri ve mülkiyeti koruyarak, dizinleri yineleyebilir, "clobber yok" ifadesini kopyalayabilir (cp -Rpn) ve genel ilerlemeyi (dosyaya göre ilerleme yerine) görüntüleyebilir, kopya oranını ve ( çok kaba) ile tahmini süre kaldı:
sudo rsync -a --info=progress2 --no-i-r /source /destination
Sudo’nun yalnızca sahip olmadığınız dizinler / dosyalar ile ilgileniyorsanız gerekli olduğunu unutmayın. Ayrıca, --no-i-ryüzde olmadan , kopya sırasında bir noktada yüzde daha düşük bir sayıya sıfırlayabilir. Belki de daha sonra rsync sürümleri, info = progress2 olan no-ir komutuna varsayılan olacaktır, ancak 3.1.2 sürümünde bulunmaz.
Zaten dosya içeren bir dizine kopyalanırken, kalan yüzde ve sürenin büyük ölçüde fazla tahmin edildiğini buldum (yani, cp -n "no clobber" kullanacağınız zamanki gibi).
Bir kabuk betiği kullanın:
#!/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
}
Bu gibi görünecek:
% cp_p /home/echox/foo.dat /home/echox/bar.dat
66% [===============================> ]
Ne yapmak istediğinize bağlı olarak, Midnight Commander ( mc) cevap olabilir. Henüz söylenmemiş olmasına şaşırdım.
Gibi pvveya rsyncdevasa bir dosyanın aktarımının ilerlemesini göstermek için iyi olan araçlar , ancak tüm dizinleri / ağaçları kopyalamak söz konusu olduğunda mc, boyutu hesaplar ve ardından ilerlemeyi çok güzel gösterir. Ayrıca, çoğu sistemde kutudan çıktı.
öznitelikleri korumak için bir seçenek daha olabilir ( sourceoluşturulacak klasörse destination)
tar -c source | pv -e -t -p -r | tar -C destination -x
umarım biri için yararlı olabilir. Tahmini transfer süresine sahip olmak için, bu işlem do -s sourceönceden gerçekleştirilerek ve bir -s <size>parametre olarak geçirilerek gerçekleştirilebilir pv.
-f -gereksizdir. tariçin varsayılan çıkış cve giriş xstdout ve stdin 'dir.
Aşağıdaki git deposunda progress_bar kaynak kodunu kontrol edin
https://github.com/Kiran-Bose/supreme
Ayrıca özel bash betiği paketini yüce deneyin
Deb dosyasını indirin ve debian temelli dağıtımda kurun veya kaynak dosyaları indirin, değiştirin ve diğer dağıtımlar için kullanın
İşlevselliğe genel bakış
(1) Açık Uygulamalar ---- Firefox ---- Hesap Makinesi ---- Ayarlar
(2) Dosyaları Yönet ---- Ara ---- Gezin ---- Hızlı erişim
|----Select File(s)
|----Inverse Selection
|----Make directory
|----Make file
|----Open
|----Copy
|----Move
|----Delete
|----Rename
|----Send to Device
|----Properties
(3) Telefonu Yönet ---- Taşı / Telefondan kopyala ---- Taşı / Telefona kopyala ---- Klasörleri senkronize et
(4) USB'yi Yönet ---- USB'den Taşı / Kopyala ---- USB'den Kopyala / Taşı
pv, cp veya başka bir şey olup olmadığını, pid verilen dosya tanımlayıcılarını nasıl izleyeceğini bilir.
Belgelerden:
(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
Örnek:
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] [ <=> ]
pvaynı şekilde izinleri işlemezcpyapar ... (denedim tek bir hızlı testin dayalı:pv.. karşısında yürütmek biraz kopya vermedirsync. Did