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 cp
bu işlevi sahip değil, sen kullanabilirsiniz pv
bunun 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, pv
temel 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. cp
temelde daha fazla meraklısı bir şey yapmaz
cat source > destination
( cat
sadece bir dosyayı okur ve onu stdout'a basar). pv
tıpkı kedi gibidir, ancak çıkış akışını başka bir yere yönlendirirseniz, bunun yerine ilerleme bilgisini stdout'a basar.
man pv
Daha 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/fd
ve /proc/PID of cp/fdinfo
ilerlemeyi anlayabilirsiniz. (Hızı anlamak size kalmış.) İzlemek için bu tekniği kullanıyorum updatedb
.
-z
muhtemelen 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.
rsync
iz 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 --progress
parametresi vardır. -a
Vb izinleri, tutacak ve -h
okunabilir 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)
-r
dizinleri tekrarlamak için bayrağını da destekler . Hatta cp için doğrudan bir yedek olarak takma olabilir:alias cp="rsync -ah --progress"
--progress
kafamı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 gcp
ve gcp
cp 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.
gcp
dosyaları kopyalamak için kullanılır ve --preserve
çeşitli özelliklerin ve izinlerin korunabilmesi ve --recursive
tüm dizinlerin kopyalanabilmesi için seçenekler vardır. Seçenekleriyle ilgili daha fazla bilgi, çevrimiçi olarak Ubuntu man sayfalarına girerek man gcp
veya bu sayfalara giderek bulunabilir . Bu sitede bir öğretici de bulunmaktadır .
İle gcp
depolardan 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.0
gcp'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
gcp
oldukça iyi ama DBUS / X gereksinimi garip. Bunu SSH üzerinden ssh yönlendirme kullanarak yaptım: ssh -X user@host
bu 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
, cp
komuta 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 dd
için başka bir terminal de kullanabilirsiniz dd
, başka bir seçenek de watch -n 1 pkill -USR1 dd
periyodik olarak ilerlemesini göstermek (her saniye).
Depolarda adı verilen progress
ve 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 pv
yerel başa çıkabilirim cp
kullanarak, görevleri dd
ile pv
hem 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
100M
Yukarıda kaynak dosyanızın gerçek boyutuyla değiştirin .
İken scp
pek uygulayarak geçerli ilerleme gösterebilir dd
ile 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 -q
daha 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 DIR
Hedefin 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 INTERVAL
nedenle 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-r
yü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 pv
veya rsync
devasa 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 ( source
oluş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. tar
için varsayılan çıkış c
ve giriş x
stdout 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] [ <=> ]
pv
aynı şekilde izinleri işlemezcp
yapar ... (denedim tek bir hızlı testin dayalı:pv
.. karşısında yürütmek biraz kopya vermedirsync
. Did