Büyük miktarda dosyayı taşıma (~ 100 000)


13

Klasör başına 100 000 hatta 100000 dosya gibi çok sayıda dosya içeren klasörlerle çalışıyorum. Bir klasörün içeriğini başka bir klasöre taşımaya çalıştığımda, bilgisayarım her zaman takılıyor. İşlem bittiğinde bile, herhangi bir klasörün içeriğini göremiyorum çünkü nautilus tamamen donmuş görünüyor ve bilgisayarımı yeniden başlamaya zorlamak zorundayım. Bunun 10.000 dosya gibi taşınmaya çalıştığımda da olduğunu fark ettim.

Bu bilgisayarımın bir sorunu mu yoksa bu numaralarla çalışırken normal mi?

Bu dosya aktarımını gerçekleştirmenin akıllıca bir yolu var mı?


3
Terminal ( cp -R SRC/ DEST/)
UniversallyUniqueID

2
@BharadwajRaju: Dosyalara bağlı olarak cp -a daha iyi olabilir çünkü sahiplerini, zaman damgalarını ve izinleri korur. Ayrıca transferleri doğrulayabildiği ve yalnızca mevcut olmayan dosyaları kopyalayabildiği için rsync'i öneririm.
Michael

Güncelleme: gvfs-copy( gvfs-binpaketten) daha hızlı olabilir cp.
UniversallyUniqueID

Burada bir yerine iki sorunuz var. Talimatlar için lütfen Nasıl Sorulur sayfasına bakın.
Luís de Sousa

Yanıtlar:


19

Belki de çok büyük miktarlarda dosyaları aktarmak için saf bir komut satırı yöntemi kullanmayı düşünün, şüphesiz sürecin bir gui kullanmaktan çok daha hızlı olduğunu göreceksiniz .

Bunu yapmanın birçok farklı yolu vardır, ancak aşağıdakiler sistemimde hızlı, güvenli ve verimli bir şekilde çalıştı:

find . -maxdepth 1 -type f -print0 | xargs -0 mv -t <destination>

Bu komut için bazı açıklamalar:

  1. Giriş dizininiz '.' karakteri ve bu özel komut için o dizinde olmanız gerekir
  2. Çıktı dizininiz <destination>benim örneğimde Açıkçası bunu kendi ihtiyaçlarınıza göre değiştirin ve parantezleri dışarıda bırakın.
  3. Bu sözdizimi boşluklu dosya adlarına bonus olarak izin verir :)

Sonsuz permütasyonlar mümkündür, ancak bu GUI'den daha iyi ve çok daha verimli çalışmalıdır . Örneğin bir permütasyon: sadece pdf dosyalarını taşımak isterseniz, çalıştırabilirsiniz:

find . -iname "*.pdf" -maxdepth 1 -type f -print0 | xargs -0 mv -t <destination>

Kullanımı xargsözellikle dosyaların böyle çok sayıda hareketiyle birçok olanaklar açar. Çok, çok olasılık ....

Potansiyel Sorunlar:

Bu düşünceler için aşağıdaki yorumcular sayesinde, düşünmek için en az 2 potansiyel tuzak vardır:

  1. Hedef dizininiz bozulmuş olabilir, daha sonra ulaşılamayan bir konumda, yanlış yazılan vb mv. Dosyaları oraya taşıyacaktır! Burada dikkatli ol ...
  2. Eğer -tseçeneği ( --target-directory) eksik ve hedef klasör aslında bir dosyadır Eğer bir dosya taşımak ve dinlenme üzerinde başarısız olur. mv: 2 kullanımları vardır adlandırma hedef veya kaynak hareket kaynaktan dizine . Yine dikkatli olun ...

2
Sadece find . -maxdepth 1 -type f -exec mv -t test {} +yapmaz mıydın?
muru

@muru: Bunun için teşekkürler, yabancı bir -name...parçaya geçtim ama xargsyerinde kaldım .
andrew.46

2
Bilmiyorum ... Komut açıkça göründüğü gibi doğru olsa da, tam bir hamleyi biraz hataya eğilimli olarak düşünürdüm. (Eğer, örneğin, eklemeyi unutursam ne -tbayrak? I tüm dosyaları denilen tek dosyaya "taşınır" olacağını düşünüyorum testbiri hariç tüm dosyalarınızı kaybına neden.) Ben bir tercih edeceğini düşünüyorum rsyncardından eğer her şey yolunda giderse, a rm. Ancak, böyle bir kontrolün otomatikleştirilemediği senaryoları hayal edebiliyorum.
Jos

@Jos: Teşekkürler, bu olasılığı açıklayan bir altbilgi notu ekledim. rsync Yanıt olarak yazılmış bir örneği görmek güzel mi?
andrew.46

Linux son derece uzun argüman listelerini destekler, bu yüzden muhtemelen yapabilirsiniz mv dir1/* dir2ve sadece find -execbir sorun varsa veya klasörleri globunuzla eşleştirmekten kaçınmanız gerekiyorsa başvurabilirsiniz . (Adlandırma kurallarınıza bağlı olarak, çoğu *.*dosyayla eşleşir , ancak çoğu dizinle eşleşmez, çünkü .extensiondosyalarda bir dosyaya sahip olmak yaygındır .ve dizin adlarında bir ortak olmamak yaygındır )
Peter Cordes

4

Daha önce benzer bir deneyim yaşadım, çok sayıda dosyayla uğraşırken normaldir. Geniş bir PDF veri sayfası koleksiyonum vardı (elektronik parçalar).

GUI araçları bazı dosya ayrıntılarını ve meta verileri (Simge / Küçük Resim, Boyut, ...) kontrol eder, bu durumda büyük bir anlaşma olacaktır. Simge Görünümünde ve küçük resimler olmadan bile, çoğu böyle bir durum için tasarlanmadığından donarlar. GUI aracı, bu öğeler geçerli ekran bölümünde kullanıcı tarafından görülemese bile dizindeki tüm dosyalar / klasörler için sunum simgelerini yüklemeye çalışır. Sıralama da sorunun bir parçasıdır ve bundan kaçınmanın bir yolu yoktur.

  • Her biri 10000'den daha az marka / modele dayalı olarak dosyaları ayrı klasörlere bölüyorum. Tarihi (çoğu insanın fotoğraflarda / taramalarda yaptığı gibi) veya ilk harf (ler) i ( Ubuntu paket deposunda olduğu gibi ) kullanabilirsiniz
  • Bunun yerine CLI araçlarını kullanmak daha kolaydır, çünkü yalnızca istediğinizi gösterirler. locateYerine hızlı arama için kullanabilirsiniz find.
  • Taşıma işlemi mviçin terminalde kullanım (GUI araçları yavaştır çünkü görünümü periyodik olarak güncellemeye çalışırlar).

    Aynı bölümdeyse, komut yalnızca Dosya sistemi dizinindeki işaretçileri değiştirir. Değilse, çift işlem olacaktır (kopyala ve sil). Bu pahalı olacak.

Yardımcı olabileceğim tek bir durum var, bu dosyaları birden çok kez kopyalıyorsanız ve güncellenmezler. Koleksiyonumu arkadaşlarımla paylaştığım gibi, her kopyalamaya çalıştığımda on yıl sürüyor. (Bu yalnızca küçük boyutlu dosyalarla daha kullanışlıdır)

  • Tek bir paket veya sıkıştırılmış / düşük sıkıştırmalı zip gibi birkaç paket oluşturun. Kopyaladığınızda, daha hızlı olacaktır, bu yüzden DMA işini yapsın.

3

GUI hissi ve esnekliği bir araya getirerek komut satırı işlemlerinin faydalarını sağlayan bir çözüm arıyorsanız, tavsiye ederim mc( gece yarısı komutanı ).

mc komutanı 2 bölmeli görünüm

Ncurses tabanlı bir görsel dosya yöneticisidir - dosyalarınızda iki bölmeli bir görünüm ve bir menü vardır. Farenin kullanımı, ssh üzerinde bile mümkündür. FS'nize göz atabilir, dosya görüntüleyici ile dosyaları inceleyebilir, anında ölçütlere göre filtreleyebilir ve komut satırında kopyalama veya taşıma işlemlerini yapabilirsiniz.

Seksenli yılların ortalarında popüler olan Norton komutanı DOS programının bir klonudur . GUI benim için güvenilmez olmaya başladığında iyi çalışır ve amacınız için idealdir.


0

Biraz benzer sorunlarla karşılaştım - RAID kurulumumu test ediyordum ve büyük transferler yaparken (örneğin bir seferde 100.000+ dosya ve 1-2 TB veri) transferler oldukça hızlı başlıyor gibi görünüyor - ~ 200MB / sn diyelim, hızlı bir şekilde makul bir platoya yavaş yavaş ~ 90-120MB / sn (sürücülerde flash önbellek depolama alanı kullandıktan sonra). Daha sonra 20-30 dakika sonra, operasyon yavaş yavaş çok daha düşük bir plato ~ 30-40MB / sn düşmeye başlar, küçük dosyalarla uğraşırken daha kötü - 15 saat daha yakın 4-5 saatlik bir işlem alarak.

Teşhis etmek için biraz zaman harcadım - örneğin olası sürücü hataları. Farklı araçlar denemelerine rağmen - komut satırı, nautilus, çok büyük kopyalama işlemleri için iyi bir verim sağlayamadım.

Benim için en iyi olan şey gece yarısı komutanını kullanmaktı ve kopyalama işlemi yavaşladığında, beklemedeki işlemler söndükten sonra sabit sürücü ışığı sönene kadar işlemi durdururdum - genellikle bir dakika kadar sonra - MC'yi tekrar duraklatın ve 20-30 dakika daha iyi bir hızda geri çekilecekti. Oldukça sinir bozucu olsa.

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.