โปรแกรมไปยังคิวไฟล์สำหรับการคัดลอก / ย้าย / ลบใน linux หรือไม่


10

ฉันค้นหาคำตอบสุทธิของ Linux สำหรับสิ่งที่ต้องการ Teracopy (Windows) ... แต่ไม่สามารถหาสิ่งที่เหมาะสม

สิ่งที่ฉันได้ใกล้ที่สุดคือ:

  • Krusader กล่าวถึงในคุณสมบัติของพวกเขา แต่ระบุว่า 'ยังไม่ได้ใช้งาน'
  • MiniCopier แอปที่ใช้ภาษาจาวาhttp://a.courreges.free.fr/projets/minicopier/minicopier-en.php
  • rsync ไม่ใช่ตัวเลือก

มีคนแนะนำฉันเป็นเครื่องมือคัดลอกไฟล์อย่างง่ายที่สามารถจัดคิวไฟล์เพื่อคัดลอก / ย้าย / ลบได้หรือไม่? โดยเฉพาะอย่างยิ่งถ้าฉันสามารถลากและวางจาก Nautilus

ถ้าไม่มีอะไรแบบนี้มีใครช่วยบอกหน่อยได้ไหมว่าทำไม? ... ฉันเป็นคนเดียวที่ต้องการสิ่งนี้หรือไม่?


2
หากคุณสามารถอธิบายสิ่งที่คุณต้องการได้อย่างแน่นอนมันจะมีประโยชน์ ฉันเดาว่าผู้ใช้ linux ส่วนใหญ่จะไม่คุ้นเคยกับ "Teracopy"
Peltier

1
นี่เป็นเพราะการคัดลอกและการลบขนาดใหญ่ต้องใช้เวลาและอินเทอร์เฟซ GUI ไม่พร้อมใช้งาน / มีประโยชน์น้อยลงในขณะที่ทำงานอยู่หรือไม่
dmckee --- ผู้ดูแลอดีตลูกแมว

คำอธิบายบางส่วนของคำขอนี้สามารถพบได้ที่นี่: superuser.com/questions/9284/…
dmckee --- อดีตผู้ดูแล kitten

รอสักครู่ MiniCopier ไม่สามารถใช้งานกับ Linux ได้ใช่ไหม มันเป็นแอพ Java
Ryan C. Thompson

1
@Tobu Terracopy สามารถจัดคิวและหยุดงานคัดลอกหลายรายการได้ชั่วคราว
Kokizzu

คำตอบ:


3

ฉันเพิ่งเขียนสคริปต์ง่ายๆนี้ซึ่งฉันเรียกว่า 'cpw' เพื่อแก้ปัญหานี้

คุณใช้มันเหมือนกับที่คุณใช้ cp ... ความแตกต่างเพียงอย่างเดียวคือมันสร้างอาเรย์ของกระบวนการ cpw ใด ๆ ที่กำลังทำงานอยู่เมื่อมันเริ่มทำงานและรอให้เสร็จก่อนที่จะส่งคำสั่งไปที่ cp ด้วยวิธีนี้มันจะทำงานเหมือนคิวจัดระเบียบตัวเอง

คุณสามารถเพิ่มงาน cpw พื้นหลัง แต่พวกเขาจะไม่ก้าวต่อกัน พวกเขาจะดำเนินการทีละครั้ง

ฉันแน่ใจว่าคนอื่นสามารถแนะนำการปรับปรุง

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

ตัวอย่างการใช้งาน:

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

เพียงคำเตือนฉันลองใช้สคริปต์นี้และด้วยเหตุผลที่ฉันยังไม่ได้ตรวจสอบเพิ่มเติมมันสามารถหยุดรออย่างไม่มีกำหนดเพื่อให้สคริปต์อื่นดำเนินการให้เสร็จ วิธีที่เชื่อถือได้มากขึ้นในการบรรลุความพิเศษในทุบตีคือการใช้ฝูง -e ดูตัวอย่างได้ที่นี่: stackoverflow.com/questions/17996577/ …
px1mp

1

จากประสบการณ์ของฉันการทำสำเนาสองสามอย่างพร้อมกันใน Linux ไม่ได้ลดทอนปริมาณงานโดยรวม การวัดปริมาณงานของฉันขึ้นอยู่กับอาร์กิวเมนต์ -P ของ rsync กรณีเฉพาะของฉันคือการคัดลอกจำนวนโฟลเดอร์ที่เต็มไปด้วยไฟล์ขนาดใหญ่แยกจากฮาร์ดไดรฟ์ USB ในเวลาเดียวกัน

ดังนั้นหากคุณไม่ได้คัดลอกหลายสิ่งพร้อมกันคุณควรจะปรับ


ขออภัยที่จะพูด แต่นี่เป็นเหมือนความคิดเห็นเพิ่มเติม ความคิดเห็นมากมายไม่ใช่คำตอบจริงๆ
Mrchief

1

เนื่องจากสคริปต์ที่ Josh Arenberg มอบให้อาจมีปัญหาเกี่ยวกับการหยุดชะงัก (ซึ่งฉันยังไม่เคยสัมผัสมาก่อน ไม่ควรมีปัญหาการหยุดชะงัก นอกจากนี้ยังใช้งานได้กับคำสั่งเชลล์ใด ๆ ไม่ใช่แค่ 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

มันสร้างห่วงโซ่ของกระบวนการแต่ละรอก่อนหน้านี้ หากกระบวนการที่อยู่ตรงกลางของโซ่หยุดทำงานขณะรอ (ไม่น่าจะเป็นไปไม่ได้ แต่เป็นไปไม่ได้) โซ่นั้นจะแตกและทั้งสองส่วนจะทำงานแบบขนาน สิ่งเดียวกันนี้จะเกิดขึ้นหากกระบวนการใดกระบวนการหนึ่งถูกฆ่า

การใช้งานเช่นนี้:

q $COMMAND $ARGS

หรือแม้กระทั่ง

q $COMMAND $ARGS; $ANOTHER_COMMAND $MORE_ARGS

ทดสอบเช่นโดยการพิมพ์

q sleep 10 &
q echo blubb &

และพบว่าหลังจากผ่านไป 10 วินาทีจะถูกพิมพ์ออกมา


บางครั้งฉันได้รับอนุญาตปฏิเสธข้อผิดพลาดสำหรับwhile kill -0 "$pid" 2&>1 >/dev/null; doบรรทัด ความคิดใด ๆ
Mrchief

ตกลงดังนั้นหลังจากใช้มันมานานฉันสามารถพูดได้ว่ามันใช้งานไม่ได้ อาจเกิดข้อผิดพลาดในการเข้าถึงเป็นสาเหตุของมัน แต่ฉันสามารถเห็นหลายcpก้าวกัน
Mrchief


0

ฉันไม่รู้อะไรเกี่ยวกับเรื่องนี้สำหรับ Linux (แม้ว่าจะไม่ได้บอกว่าไม่มีสักแห่ง) ซอฟต์แวร์ Linux มีแนวโน้มที่จะได้รับการเขียนโดยผู้ใช้ Linux ผู้ใช้ Linux ที่มีประสบการณ์อาจไม่คิดว่าจะสร้างเครื่องมือเช่นนี้เพราะหากพวกเขาสังเกตเห็นการชะลอตัวของการคัดลอกในช่วงเซสชัน GUI พวกเขามีแนวโน้มที่จะเปลี่ยนไปใช้เทอร์มินัลและคัดลอกผ่าน commandline

ต่อไปนี้เป็นอรรถประโยชน์การคัดลอกบรรทัดคำสั่งพื้นฐานที่รวดเร็วและไม่ส่งผลกระทบต่อสภาพแวดล้อมเดสก์ท็อปของคุณ:

  • cp ("cp foo / path / to / bar" จะคัดลอก foo ไปที่ bar)
  • mv ("mv foo / path / to / bar" จะย้าย (เปลี่ยนชื่อ) foo to bar)
  • tar ("tar cf - foo | (cd / path / to / archive /; tar xf -)" จะคัดลอกไดเรกทอรีซ้ำ)
  • rsync ("rsync -r foo / path / to / archive /" จะคัดลอกไดเรกทอรีซ้ำ)

0

สร้างรายการไฟล์และใช้ SCP เพื่อทำสำเนา สิ่งที่ดีใน linux คือคุณสามารถเพิ่มไฟล์ข้อความของคุณโดยใช้ echo


0

ฉันพบโครงการ Unix Batch System ชื่อ Task Spooler ซึ่งให้คุณจัดคิวงาน

หรือคุณสามารถทำได้ sudo apt-get install task-spooler

เมื่อติดตั้งแล้วคุณสามารถวางts(หรือtspสำหรับระบบ Ubuntu / Debian) ต่อหน้าคำสั่งเชลล์ปกติเพื่อจัดคิว

หน้านี้มีตัวอย่างมากมายเกี่ยวกับการใช้งาน: https://www.ostechnix.com/add-linux-commands-queue-execute-one-one/หรือดูวิดีโอที่นี่: https://www.youtube.com / นาฬิกา? v = wv8D8wT20ZY

ฉันตรวจสอบแล้วและดูเหมือนว่าจะทำงานได้ตามที่คาดไว้สำหรับcpคำสั่งทั้งหมดของฉัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.