Program untuk Mengantri File untuk Menyalin / Memindahkan / Menghapus di linux?

10

Saya telah mencari di internet untuk jawaban Linux untuk sesuatu seperti Teracopy (Windows) ... tetapi tidak dapat menemukan yang cocok.

Hal terdekat yang saya dapatkan adalah:

Adakah yang bisa merekomendasikan saya alat salin file sederhana yang dapat mengantri file untuk menyalin / memindahkan / menghapus Lebih disukai jika saya bisa drag and drop dari Nautilus.

Jika sesuatu seperti ini tidak ada, dapatkah seseorang memberi tahu saya alasannya? ... Apakah saya satu-satunya orang yang membutuhkan sesuatu seperti ini?

Koss
sumber
2
Jika Anda bisa menjelaskan dengan tepat apa yang Anda inginkan, itu akan berguna. Saya kira sebagian besar pengguna linux tidak akan terbiasa dengan "Teracopy".
Peltier
1
Apakah ini karena salinan besar dan penghapusan membutuhkan waktu dan antarmuka GUI tidak tersedia / kurang berguna saat sedang berjalan?
dmckee --- ex-moderator kitten
Penjelasan parsial dari permintaan ini dapat ditemukan di sini: superuser.com/questions/9284/…
dmckee --- ex-moderator kitten
Tunggu sebentar, bukankan MiniCopier tersedia untuk Linux? Ini adalah aplikasi Java.
Ryan C. Thompson
1
@Tobu Terracopy dapat mengantri dan menghentikan beberapa pekerjaan penyalinan
Kokizzu

Jawaban:

3

Saya baru saja menulis skrip sederhana ini, yang saya sebut 'cpw', untuk menyelesaikan masalah ini.

Anda menggunakannya sama seperti Anda akan menggunakan cp ... satu-satunya perbedaan adalah ia membangun sebuah array dari setiap proses cpw yang sudah berjalan saat dimulai, dan menunggu mereka selesai sebelum meneruskan perintah ke cp. Dengan cara ini, ia berperilaku seperti antrian yang mengatur diri sendiri.

Anda dapat terus menambahkan pekerjaan latar belakang cpw, tetapi mereka tidak akan saling menginjak. Mereka akan mengeksekusi satu per satu.

Saya yakin orang lain dapat menyarankan peningkatan.

#!/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

Contoh penggunaan:

$ cpw -R /src/tree /dest/tree &
Josh Arenberg
sumber
Sekadar peringatan, saya sudah mencoba skrip ini dan karena alasan yang belum saya selidiki lebih lanjut, skrip ini dapat menunggu tanpa batas hingga skrip lain selesai. Cara yang lebih dapat diandalkan untuk mencapai eksklusivitas di bash adalah dengan menggunakan flock -e. Lihat misalnya di sini: stackoverflow.com/questions/17996577/…
px1mp
1

Dalam pengalaman saya, melakukan beberapa salinan secara bersamaan di Linux tidak benar-benar mengurangi throughput keseluruhan. Pengukuran throughput saya didasarkan pada argumen-rsync -P. Kasing khusus saya secara terpisah menyalin sejumlah folder penuh dengan file besar dari hard drive USB secara bersamaan.

Jadi, kecuali Anda menyalin banyak hal sekaligus, Anda harus baik-baik saja.

Ryan C. Thompson
sumber
Maaf untuk mengatakan, tapi ini lebih seperti komentar. Banyak pendapat, bukan jawaban.
Mrchief
1

Karena naskah yang diberikan oleh Josh Arenberg mungkin memiliki beberapa masalah yang menemui jalan buntu (yang sejauh ini belum saya alami, tetapi juga belum diselidiki), saya telah menulis sesuatu sendiri. Seharusnya tidak memiliki masalah jalan buntu. Ini juga berfungsi untuk perintah shell apa pun, bukan hanya cp.

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

Ini menciptakan rantai proses, masing-masing menunggu yang sebelumnya. Jika suatu proses di tengah rantai macet saat menunggu (tidak mungkin tetapi bukan tidak mungkin), rantai rusak dan kedua bagian berjalan secara paralel. Hal yang sama terjadi jika salah satu proses terbunuh.

Penggunaan seperti ini:

q $COMMAND $ARGS

atau bahkan

q $COMMAND $ARGS; $ANOTHER_COMMAND $MORE_ARGS

Tes misalnya dengan mengetik

q sleep 10 &
q echo blubb &

dan menemukan bahwa setelah 10 detik blubb dicetak.

Minggu
sumber
Saya terkadang mendapatkan izin ditolak untuk while kill -0 "$pid" 2&>1 >/dev/null; dosaluran. Ada ide?
Mrchief
Ok, jadi setelah menggunakan ini untuk waktu yang lama, saya dapat mengatakan bahwa itu tidak berhasil. Mungkin kesalahan akses adalah penyebabnya, tetapi saya bisa melihat beberapa cploncatan satu sama lain.
Mrchief
1

Ultracopier adalah yang Anda inginkan, dengan plugin Nemo atau plugin Nautilus .

Kokizzu
sumber
0

Saya tidak tahu hal seperti ini untuk Linux (walaupun itu tidak berarti bahwa tidak ada satu pun di suatu tempat). Perangkat lunak Linux cenderung ditulis oleh pengguna Linux. Pengguna Linux yang berpengalaman mungkin tidak berpikir untuk membuat alat seperti ini, karena jika mereka melihat ada perlambatan salinan selama sesi GUI mereka cenderung beralih ke terminal dan menyalin melalui commandline.

Berikut ini beberapa utilitas penyalinan baris perintah dasar yang sangat cepat dan seharusnya tidak memengaruhi lingkungan desktop Anda:

  • cp ("cp foo / path / to / bar" akan menyalin foo ke bar)
  • mv ("mv foo / path / ke / bar" akan memindahkan (mengganti nama) foo ke bar)
  • tar ("tar cf - foo | (cd / path / ke / archive /; tar xf -)" akan menyalin direktori secara rekursif)
  • rsync ("rsync -r foo / path / to / archive /" akan menyalin direktori secara rekursif)
quack quixote
sumber
0

Buat daftar file dan gunakan SCP untuk melakukan salinan. Yang menyenangkan di linux adalah Anda dapat menambahkan ke file teks Anda menggunakan echo.

Joshua K
sumber
0

Saya menemukan proyek Sistem Batch Unix ini disebut Task Spooler yang memungkinkan Anda mengantri tugas.

Atau Anda bisa melakukannya sudo apt-get install task-spooler

Setelah terinstal, Anda cukup meletakkan ts(atau tspuntuk sistem Ubuntu / Debian) di depan perintah shell biasa untuk mengantre.

Halaman ini memiliki banyak contoh tentang penggunaannya: https://www.ostechnix.com/add-linux-commands-queue-execute-one-one/ atau Anda menonton video di sini: https://www.youtube.com / tonton? v = wv8D8wT20ZY

Saya memverifikasinya dan tampaknya berfungsi seperti yang diharapkan untuk semua cpperintah saya .

Tuan
sumber