Chương trình để xếp hàng các tệp để sao chép / di chuyển / xóa trong linux?


10

Tôi đã tìm kiếm trên mạng câu trả lời của Linux cho một cái gì đó như Teracopy (Windows) ... nhưng không thể tìm thấy bất cứ điều gì phù hợp.

Những thứ gần nhất tôi nhận được là:

Ai đó có thể giới thiệu cho tôi một công cụ sao chép tệp đơn giản có thể xếp hàng các tệp để sao chép / di chuyển / xóa không? Tốt nhất là nếu tôi có thể kéo và thả từ Nautilus.

Nếu một cái gì đó như thế này không tồn tại, ai đó có thể vui lòng cho tôi biết tại sao không? ... Tôi có phải là người duy nhất cần thứ gì đó như thế này không?


2
Nếu bạn có thể giải thích chính xác những gì bạn muốn, nó sẽ hữu ích. Tôi đoán hầu hết người dùng linux sẽ không quen thuộc với "Teracopy".
Peltier

1
Đây có phải là vì các bản sao lớn và xóa mất thời gian và giao diện GUI không khả dụng / ít hữu ích hơn trong khi chúng đang chạy?
dmckee --- ex-moderator mèo con

Có thể tìm thấy một lời giải thích một phần về yêu cầu này tại đây: superuser.com/questions/9284/,
dmckee --- ex-moderator mèo con

Đợi một chút, không phải MiniCopier có sẵn cho Linux không? Đây là một ứng dụng Java.
Ryan C. Thompson

1
@Tobu Terracopy có thể xếp hàng và tạm dừng nhiều công việc sao chép
Kokizzu 16/07/2015

Câu trả lời:


3

Tôi chỉ viết kịch bản đơn giản này, mà tôi gọi là 'cpw', để giải quyết vấn đề này.

Bạn sử dụng nó giống như bạn sẽ sử dụng cp ... sự khác biệt duy nhất là nó xây dựng một mảng của bất kỳ quy trình cpw nào đang chạy khi nó được khởi động và đợi chúng kết thúc trước khi truyền lệnh cho cp. Theo cách này, nó hoạt động như một hàng đợi tự tổ chức.

Bạn có thể tiếp tục thêm các công việc cpw nền, nhưng chúng sẽ không giẫm đạp lên nhau. Họ sẽ thực hiện từng cái một.

Tôi chắc rằng những người khác có thể đề xuất cải tiến.

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

Ví dụ sử dụng:

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

Chỉ là một cảnh báo, tôi đã thử kịch bản này và vì một lý do tôi chưa điều tra thêm, nó có thể bị treo vô thời hạn chờ các kịch bản khác hoàn thành. Cách đáng tin cậy hơn để đạt được tính độc quyền trong bash là sử dụng flock -e. Xem ví dụ tại đây: stackoverflow.com/questions/17996577/ từ
px1mp

1

Theo kinh nghiệm của tôi, thực hiện đồng thời một vài bản sao trong Linux không thực sự làm giảm thông lượng tổng thể. Phép đo thông lượng của tôi dựa trên đối số -P của rsync. Trường hợp cụ thể của tôi là sao chép riêng một số thư mục chứa đầy các tệp lớn từ ổ cứng USB cùng một lúc.

Vì vậy, trừ khi bạn sao chép nhiều thứ cùng một lúc, bạn sẽ ổn thôi.


Xin lỗi để nói, nhưng điều này giống như một bình luận. Rất nhiều ý kiến, không thực sự là một câu trả lời.
Ông trùm

1

Vì kịch bản do Josh Arenberg đưa ra có thể có một số vấn đề bế tắc (mà tôi chưa gặp phải cho đến nay, nhưng cũng chưa điều tra), tôi đã tự mình viết ra một cái gì đó. Nó không nên có vấn đề bế tắc. Nó cũng hoạt động cho bất kỳ lệnh shell nào, không chỉ 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

Nó tạo ra một chuỗi các quy trình, mỗi quy trình chờ đợi trước đó. Nếu một quá trình ở giữa chuỗi gặp sự cố trong khi chờ đợi (không thể nhưng không phải là không thể), chuỗi bị hỏng và cả hai phần chạy song song. Điều tương tự xảy ra nếu một trong các quy trình bị giết.

Cách sử dụng như thế này:

q $COMMAND $ARGS

hoặc thậm chí

q $COMMAND $ARGS; $ANOTHER_COMMAND $MORE_ARGS

Kiểm tra ví dụ bằng cách gõ

q sleep 10 &
q echo blubb &

và phát hiện ra rằng sau 10 giây blubb được in.


Đôi khi tôi nhận được sự cho phép từ chối lỗi cho while kill -0 "$pid" 2&>1 >/dev/null; dodòng. Có ý kiến ​​gì không?
Ông trùm

Ok, vì vậy sau khi sử dụng một thời gian dài, tôi có thể nói rằng nó không hoạt động. Có thể lỗi truy cập là nguyên nhân của nó nhưng tôi có thể thấy nhiều cpbước chân vào nhau.
Ông trùm


0

Tôi không biết bất cứ điều gì như thế này cho Linux (mặc dù điều đó không có nghĩa là không có ở đâu đó). Phần mềm Linux có xu hướng được viết bởi người dùng Linux. Người dùng Linux có kinh nghiệm có thể không nghĩ sẽ tạo ra một công cụ như thế này, bởi vì nếu họ nhận thấy bất kỳ sự chậm lại nào của bản sao trong phiên GUI, họ có khả năng chuyển sang thiết bị đầu cuối và sao chép qua dòng lệnh.

Dưới đây là một số tiện ích sao chép dòng lệnh cơ bản rất nhanh và không ảnh hưởng đến môi trường máy tính để bàn của bạn:

  • cp ("cp foo / path / to / bar" sẽ sao chép foo vào thanh)
  • mv ("mv foo / path / to / bar" sẽ di chuyển (đổi tên) foo thành thanh)
  • tar ("tar cf - foo | (cd / path / to / archive /; tar xf -)" sẽ sao chép đệ quy một thư mục)
  • rsync ("rsync -r foo / path / to / archive /" sẽ sao chép đệ quy một thư mục)

0

Tạo một danh sách các tập tin và sử dụng SCP để thực hiện sao chép. Điều tuyệt vời trong linux là bạn có thể thêm vào tệp văn bản của mình bằng echo.


0

Tôi đã tìm thấy dự án Unix Batch System này có tên là Bộ đệm nhiệm vụ cho phép bạn xếp hàng các tác vụ.

Hoặc bạn có thể làm sudo apt-get install task-spooler

Sau khi cài đặt, bạn chỉ cần đặt ts(hoặc tspcho các hệ thống Ubuntu / Debian) trước bất kỳ lệnh shell thông thường nào để xếp hàng.

Trang này có rất nhiều ví dụ về cách sử dụng: https://www.ostechnix.com/add-linux-commands-queue-execute-one-one/ hoặc bạn xem video tại đây: https://www.youtube.com / xem? v = wv8D8wT20ZY

Tôi đã xác minh nó và nó dường như hoạt động như mong đợi cho tất cả cpcác lệnh của tôi .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.