Linux Kopyalama / Taşıma / Silme için Dosyaları Kuyruk Program?


10

Net'i Teracopy (Windows) gibi bir şeye Linux'un cevabını araştırdım ... ama uygun bir şey bulamadım.

Aldığım en yakın şeyler:

Birisi bana dosyaları kopyalama / taşıma / silme için sıraya koyabilecek basit bir dosya kopyalama aracı önerebilir mi? Tercihen Nautilus'tan sürükleyip bırakabilirsem.

Böyle bir şey yoksa, biri bana nedenini söyleyebilir mi? ... böyle bir şeye ihtiyacı olan tek kişi ben miyim?


2
Tam olarak ne istediğinizi açıklayabilseydiniz, faydalı olurdu. Sanırım çoğu linux kullanıcısı "Terakopi" ye aşina olmayacak.
Peltier

1
Bunun nedeni, büyük kopyaların ve silme işlemlerinin zaman alması ve GUI arabiriminin çalışırken kullanılamaması / daha az kullanışlı olmasıdır.
dmckee --- ex-moderatör kedi yavrusu

Bu talebin kısmi bir açıklamasını burada bulabilirsiniz: superuser.com/questions/9284/…
dmckee --- eski moderatör yavru kedi

Bir dakika, MiniCopier Linux için mevcut değil mi? Bu bir Java uygulaması.
Ryan

1
Tobu Terracopy birden fazla kopyalama işini sıralayabilir ve duraklatabilir
Kokizzu

Yanıtlar:


3

Bu sorunu çözmek için 'cpw' adını verdiğim bu basit komut dosyasını yazdım.

Sadece cp kullanacağınız gibi kullanıyorsunuz ... tek fark, başlatıldığında zaten çalışan herhangi bir cpw işleminin bir dizisini oluşturması ve komutları cp'ye iletmeden önce bitirmelerini beklemesi. Bu şekilde, kendi kendini organize eden bir kuyruk gibi davranır.

Arka plan cpw işleri eklemeye devam edebilirsiniz, ancak birbirlerine adım atmazlar. Her seferinde bir tane infaz edecekler.

Eminim başkaları iyileştirme önerebilir.

#!/bin/bash

cpwpids=(`ps -ef | grep $USER | grep 'cpw' | grep -v grep | grep -v $$ | awk '{ print $2 }'`) #build an array of all cpw procs for this user that aren't this one.

cpwcnt=${#cpwpids[@]} # number of elemenets in the above array
cnt=$cpwcnt # counter to be decremented each pass
while [ $cnt -gt 0 ]
do
    cnt=$cpwcnt
    for i in "${cpwpids[@]}" # check if each pid has died yet
    do
        ps --pid $i >/dev/null
        if [ $? -gt 0 ]
        then
            let "cnt -= 1"
        fi
    done
    sleep 2
done
cp -v "$@" >> /tmp/cpw.log #log

Kullanım örneği:

$ cpw -R /src/tree /dest/tree &

Sadece bir uyarı, bu senaryoyu denedim ve daha fazla araştırmadım, diğer scriptlerin bitmesini beklemek sonsuza kadar bekleyebilir. Bash'da münhasırlık elde etmenin daha güvenilir yolu flok -e kullanmaktır. Örnek için buraya bakın: stackoverflow.com/questions/17996577/…
px1mp

1

Deneyimlerime göre, Linux'ta aynı anda birkaç kopya yapmak, genel verimi gerçekten azaltmaz. Verim ölçümüm rsync'in -P argümanına dayanıyor. Benim özel durumum, aynı anda bir USB sabit diskten büyük dosyalarla dolu bir dizi klasörü ayrı ayrı kopyalamaktır.

Dolayısıyla , aynı anda birçok şeyi kopyalamazsanız , iyi olmalısınız.


Söylemek için üzgünüm, ama bu daha çok bir yorum gibidir. Çok fazla fikir, gerçekten bir cevap değil.
tarihli Mrchief

1

Josh Arenberg tarafından verilen senaryoda bazı kilitlenme sorunları olabileceğinden (şimdiye kadar deneyimlemediğim, ancak araştırmadım), kendi başıma bir şey yazdım. Kilitlenme problemleri olmamalıdır. Ayrıca sadece cp için değil, herhangi bir kabuk komutu için çalışır.

Contents of ~/bin/q

#!/bin/bash

#this waits for any PIDs to finish
anywait(){

    for pid in "$@"; do
        while kill -0 "$pid" 2&>1 >/dev/null; do
            sleep 0.5
        done
    done
}


PIDFILE=~/.q.pid

#open PIDFILE and aquire lock
exec 9>>$PIDFILE
flock -w2 9 || { echo "ERROR: flock() failed." >&2; exit 1; }

#read previous instances PID from PIDFILE and write own PID to PIDFILE
OLDPID=$(<$PIDFILE)
echo $$>$PIDFILE

#release lock
flock -u 9

#wait for OLDPID
anywait $OLDPID

#do stuff
"$@"


#afterwards: cleanup (if pidfile still contains own PID, truncate it)
flock -w2 9 || { echo "ERROR: flock() failed." >&2; exit 1; }
if [ $(<$PIDFILE) == $$ ]; then
truncate -s0 $PIDFILE
fi
flock -u 9

Her biri öncekini bekleyen bir süreç zinciri oluşturur. Zincirin ortasındaki bir işlem beklerken çökerse (olası değil ancak imkansız değil), zincir kırılır ve her iki parça paralel olarak çalışır. İşlemlerden biri öldürülürse aynı şey olur.

Bunun gibi kullanım:

q $COMMAND $ARGS

ya da

q $COMMAND $ARGS; $ANOTHER_COMMAND $MORE_ARGS

Örneğin yazarak test edin

q sleep 10 &
q echo blubb &

ve 10 saniye sonra blubb basıldığını bulmak.


Bazen while kill -0 "$pid" 2&>1 >/dev/null; dohat için izin verilmedi hatası alıyorum . Herhangi bir fikir?
Mrchief

Tamam, bunu uzun süre kullandıktan sonra, işe yaramadığını söyleyebilirim. Belki erişim hatası bunun sebebidir, ancak cpbirbirimize birden fazla adım görebilirsiniz .
tarihli Mrchief


0

Linux için böyle bir şey bilmiyorum (bu bir yerde olmadığını söylemek değil). Linux yazılımı Linux kullanıcıları tarafından yazılma eğilimindedir. Deneyimli Linux kullanıcıları böyle bir araç oluşturmayı düşünmeyebilir, çünkü bir GUI oturumu sırasında kopyaların yavaşladığını fark ederlerse, bir terminale geçecek ve komut satırı üzerinden kopyalayacaklardır.

Çok hızlı olan ve masaüstü ortamınızı etkilememesi gereken bazı temel komut satırı kopyalama yardımcı programları şunlardır:

  • cp ("cp foo / yol / / / bar" foo'yu çubuğa kopyalar)
  • mv ("mv foo / yol / / / bar" foo'yu çubuğa taşıyacak (yeniden adlandıracaktır)
  • tar ("tar cf - foo | (cd / path / to / archive /; tar xf -)" özyineli olarak bir dizini kopyalar)
  • rsync ("rsync -r foo / path / to / archive /" bir dizini özyineli olarak kopyalar)

0

Bir dosya listesi oluşturun ve kopyayı gerçekleştirmek için SCP'yi kullanın. Linux'ta güzel olan şey, echo kullanarak metin dosyanıza ekleyebilirsiniz.


0

Görevleri sıralamanıza izin veren Görev Biriktiricisi adlı bu Unix Toplu Sistem projesini buldum.

Veya yapabilirsin sudo apt-get install task-spooler

Kurulduktan sonra, sıraya koymak için herhangi bir normal kabuk komutunun önüne ts(veya tspUbuntu / Debian sistemleri için) koyabilirsiniz .

Bu sayfanın kullanımları hakkında birçok örnek var: https://www.ostechnix.com/add-linux-commands-queue-execute-one-one/ veya burada bir video izliyorsunuz: https://www.youtube.com / watch? v = wv8D8wT20ZY

Doğruladım ve tüm cpkomutlarım için beklendiği gibi çalışıyor gibi görünüyor .

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.