มิฉะนั้นจะมียูทิลิตีบรรทัดคำสั่งอื่นใดที่สามารถทำได้
มิฉะนั้นจะมียูทิลิตีบรรทัดคำสั่งอื่นใดที่สามารถทำได้
คำตอบ:
แม้ว่าcp
จะไม่มีฟังก์ชั่นนี้คุณสามารถใช้pv
เพื่อทำสิ่งนี้:
pv my_big_file > backup/my_big_file
หมายเหตุ: วิธีการนี้จะสูญเสียสิทธิ์และความเป็นเจ้าของของไฟล์ ไฟล์ที่คัดลอกด้วยวิธีนี้จะมีสิทธิ์เหมือนกับว่าคุณสร้างด้วยตัวเองและเป็นของคุณ
ในตัวอย่างนี้pv
เพียงแค่ส่งไฟล์ไปยัง stdout * ซึ่งคุณเปลี่ยนเส้นทางไปยังไฟล์โดยใช้>
โอเปอเรเตอร์ ในขณะเดียวกันก็จะพิมพ์ข้อมูลเกี่ยวกับความคืบหน้าไปยังสถานีเมื่อคุณทำเช่นนั้น
นี่คือสิ่งที่ดูเหมือนว่า:
stefano@ubuntu:~/Data$ pv my_big_file > backup/my_big_file
138MB 0:00:01 [73.3MB/s] [=================================>] 100%
คุณอาจต้อง ติดตั้ง pv (ผลัดประเภทsudo apt-get install pv
) ในระบบของคุณ
*: บิตทางเทคนิค
มีข้อมูลสำคัญสามสตรีมในระบบที่คล้ายยูนิกซ์: stdout (เอาต์พุตมาตรฐาน), stderr (ข้อผิดพลาดมาตรฐาน) และ stdin (อินพุตมาตรฐาน) ทุกโปรแกรมมีทั้งหมดสามอย่างดังนั้นต้องพูด ตัว>
ดำเนินการเปลี่ยนเส้นทางเปลี่ยนเส้นทางโปรแกรมไปยังไฟล์ ไม่มีข้อโต้แย้งตามที่คุณเห็นด้านบน>
เปลี่ยนเส้นทางเอาต์พุตมาตรฐานของโปรแกรมไปยังไฟล์ cp
โดยทั่วไปแล้วไม่มีอะไรที่จะเพ้อฝันไปกว่านี้อีกแล้ว
cat source > destination
(ที่cat
เพิ่งอ่านไฟล์และพิมพ์ไปยัง stdout) pv
เป็นเหมือนแมว แต่ถ้าคุณเปลี่ยนเส้นทางเป็นสตรีมเอาต์พุตมันจะพิมพ์ข้อมูลความคืบหน้าไปยัง stdout แทน
ลองดูman pv
เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับมัน
ตัวเลือกอื่นตามที่DoRแนะนำในคำตอบนี้คือใช้ rsync แทน:
$ rsync -ah --progress source-file destination-file
sending incremental file list
source-file
621.22M 57% 283.86MB/s 0:00:01
วิธีนี้จะเป็นการสงวนสิทธิ์ / ความเป็นเจ้าของในขณะที่แสดงความคืบหน้า
alias cp="rsync -avz"
cp ล้าสมัยแล้ว
pv
ไปคุณสามารถสอดแนม/proc/PID of cp/fd
และ/proc/PID of cp/fdinfo
คิดออกความคืบหน้า (มันขึ้นอยู่กับคุณที่จะอนุมานความเร็ว.) updatedb
ฉันใช้เทคนิคนี้ในการชม
-z
ควรใช้กับสำเนาเครือข่ายเท่านั้น การบีบอัดและคลายการบีบอัดข้อมูลสำหรับการคัดลอกในเครื่องเป็นค่าใช้จ่ายที่แท้จริง
rsync
ไม่ต้องเพิ่มส่วนท้าย/
ไปยังเส้นทางต้นทาง (หรือลบออกหากการทำ bash เสร็จสิ้นจะทำให้มันอยู่ตรงนั้นโดยอัตโนมัติ) มิฉะนั้นคุณจะได้รับผลลัพธ์ที่แตกต่างจากเมื่อใช้cp
(หรือgcp
)
ไม่มี ดูที่นี่เป็นสาเหตุ แม้ว่ามันจะทำมากกว่าที่คุณต้องการ แต่rsync
ก็มี--progress
พารามิเตอร์ -a
จะให้สิทธิ์ ฯลฯ และ-h
จะมีคนอ่าน
rsync -ah --progress source destination
ผลลัพธ์จะมีลักษณะดังนี้:
Pictures/1.jpg
2.13M 100% 2.28MB/s 0:00:00 (xfr#5898, to-chk=1/5905)
Pictures/2.jpg
1.68M 100% 1.76MB/s 0:00:00 (xfr#5899, to-chk=0/5905)
-r
ตั้งค่าสถานะเพื่อ recurse ไดเรกทอรี มันสามารถใช้นามแฝงเป็นตัวทดแทนโดยตรงสำหรับ cp:alias cp="rsync -ah --progress"
--progress
ทำให้หัวฉันหมุนได้ spin ดูการแสดงผลทั้งหมดในเทอร์มินัล ดังนั้นผู้ที่มาที่นี่จากการค้นหาคำหลักของ AOL rsync -ah --info=progress2 [source] [destination]
นำเสนอผลลัพธ์ใน IMHO ที่มีสติมากกว่าเดิม
หากคุณต้องการดูว่าไฟล์ของคุณถ่ายโอนอย่างถูกต้องคุณสามารถใช้gcp
และgcp
เหมือน cp แต่ตามค่าเริ่มต้นจะให้แถบความคืบหน้าเพื่อให้คุณสามารถดูสิ่งที่ถูกคัดลอก ในฐานะที่เป็นโปรแกรมบันทึกวิกิพีเดีย , gcp
มีคุณสมบัติที่มีประโยชน์หลายอย่างเช่น
- บ่งชี้ความก้าวหน้าในการถ่ายโอน
- การคัดลอกอย่างต่อเนื่องเมื่อเกิดข้อผิดพลาด (ข้ามไปที่ไฟล์ถัดไป)
- การบันทึกสถานะการคัดลอก: gcp จะบันทึกการกระทำทั้งหมดเพื่อให้สามารถทราบได้ว่าไฟล์ใดที่ถูกคัดลอกสำเร็จ
- ชื่อ mangling เพื่อจัดการข้อ จำกัด ของระบบไฟล์เป้าหมาย (ตัวอย่างเช่นการลบอักขระที่เข้ากันไม่ได้ "*" หรือ "?" ใน FAT)
อย่างไรก็ตามแม้ว่าแถบความคืบหน้าจะถึง 100% เมื่อใช้เครื่องมือนี้คุณจะต้องรอจนกว่าเครื่องปลายทางของคุณจะปรากฏขึ้นอีกครั้งก่อนที่จะลบสื่อของคุณอย่างปลอดภัยเพื่อให้คุณมั่นใจได้ว่ากระบวนการถ่ายโอนเสร็จสิ้น
gcp
ใช้เพื่อคัดลอกไฟล์และมีตัวเลือกต่าง ๆ เช่น--preserve
เพื่อให้สามารถเก็บรักษาแอตทริบิวต์และสิทธิ์ต่าง ๆ ไว้และ--recursive
คัดลอกไดเรกทอรีทั้งหมดได้ ข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกที่สามารถพบได้โดยการป้อนman gcp
หรือโดยไปที่manpages อูบุนตูออนไลน์ การสอนยังมีอยู่ในเว็บไซต์นี้
ติดตั้งgcp
จากที่เก็บด้วย
sudo apt-get install gcp
( หมายเหตุ : ใน Ubuntu 12.10 จุด automount ใหม่คือตัวอย่าง/media/user/usbdisk
)
คุณสามารถคัดลอกไฟล์ไปยังสื่อของคุณโดยการป้อน
gcp /home/mike/file.mp4 /media/usb
และคัดลอกโฟลเดอร์ไปยังสื่อของคุณด้วย
gcp -rv ~/Podcasts /media/Mik2
เอาต์พุตตัวอย่างจากgcp
ด้วยแถบความคืบหน้า:
gcp ~/Videos_incIplayer/mars.flv /media/Mik2
Copying 168.57 MiB 100% |########################################################| 7.98 M/s Time: 00:00:22
แน่นอนคุณสามารถระบุหลายไฟล์หรือโฟลเดอร์ที่จะคัดลอกไปยังดิสก์ของคุณและมีจำนวนมากของตัวเลือกอื่น ๆ man gcp
ครอบคลุมใน
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NotSupported: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
export DISPLAY=:0.0
ก่อนเริ่ม gcp หากเครื่องไม่มีหัวคุณต้องเริ่ม xsession เป็น framebuffer เสมือนจริงหรือบางสิ่ง ณ จุดนั้นคุณน่าจะแค่มองหาโปรแกรมอื่น
gcp
ค่อนข้างดี แต่ข้อกำหนด DBUS / X นั้นแปลก ฉันจัดการสิ่งนี้ผ่าน SSH โดยใช้การส่งต่อ ssh: ssh -X user@host
และนั่นทำให้ฉันสามารถเรียกใช้
ฉันเลิกใช้ cURL เพื่อจุดประสงค์นี้ man page แสดงรายการโปรโตคอล "ไฟล์" ที่ได้รับการสนับสนุนดังนั้นใช้มันเหมือนกับโปรโตคอลอื่น ๆ ใน URL:
curl -o destination FILE://source
ความเร็วความคืบหน้าเวลาที่เหลือและอื่น ๆ - ทั้งหมดอยู่ในรูปแบบที่คุ้นเคย
pv
ที่มันจะไม่บันทึกสิทธิ์
แม้ว่ามันจะไม่แสดงความเร็ว แต่เมื่อทำการคัดลอกหลายไฟล์-v
ตัวเลือกในcp
คำสั่งจะให้ข้อมูลความคืบหน้าแก่คุณ เช่น
cp -rv old-directory new-directory
เคอร์เนลรู้ข้อมูลส่วนใหญ่เช่นความเร็วและมักจะเป็นเปอร์เซ็นต์ เมล็ดพันธุ์ที่ทันสมัยเปิดเผยสิ่งนี้ผ่านระบบไฟล์ / proc ของพวกเขา
showpeed จากhttps://github.com/jnweiger/showspeedใช้ข้อมูลนั้น มันสามารถแนบกับโปรแกรมที่กำลังรันอยู่และให้การปรับปรุงเป็นระยะดังนี้:
$ dd if=bigfile of=/tmp/otherbigfile &
$ showspeed dd
dd looks like a process name. pid=4417 matches av0=dd.
p/4417/fd/0r /home/jw/bigfile 113MB/s (12%, 2.3GB) 9m:35
p/4417/fd/1w /tmp/otherbigfile 182MB/s (2.6GB)
p/4417/fd/0r /home/jw/bigfile 285MB/s (15%, 3.0GB) 8m:08
p/4417/fd/0r /home/jw/bigfile 115MB/s (16%, 3.2GB) 8m:01
p/4417/fd/0r /home/jw/bigfile 107MB/s (17%, 3.4GB) 7m:39
p/4417/fd/1w /tmp/otherbigfile 104MB/s (3.5GB)
p/4417/fd/0r /home/jw/bigfile 139MB/s (19%, 3.7GB) 7m:37
p/4417/fd/0r /home/jw/bigfile 116MB/s (20%, 3.9GB) 7m:18
p/4417/fd/1w /tmp/otherbigfile 67MB/s (4.0GB)
p/4417/fd/1w /tmp/otherbigfile 100MB/s (4.1GB)
...
pkill -USR1 dd
เพื่อdd
แสดงสถานะของมันตัวเลือกอื่นจะwatch -n 1 pkill -USR1 dd
ทำให้มันแสดงความคืบหน้าเป็นระยะ (ทุกวินาที)
มีเครื่องมือที่เรียกว่าprogress
ในที่เก็บที่สามารถตรวจสอบคำสั่งต่าง ๆ และแสดงข้อมูลความคืบหน้าสำหรับพวกเขา
ติดตั้งโดยใช้คำสั่ง
sudo apt-get install progress
เครื่องมือนี้สามารถใช้ได้ดังนี้
cp bigfile newfile & progress -mp $!
เอาท์พุท:
[11471] cp /media/Backup/Downloads/FILENAME.file
29.9% (24.2 MiB / 16 MiB)
ในขณะที่pv
สามารถจัดการกับcp
งานในท้องถิ่นได้การใช้งานdd
กับpv
สามารถจัดการกับงานทั้งในท้องถิ่น ( cp
) และระยะไกล ( scp
)
dd if=path/to/source.mkv | pv | dd of=path/to/dest.mkv
โปรดตรวจสอบให้path/to/dest.mkv
ออกโดยtouch path/to/dest.mkv
สิ่งนี้สามารถแสดงความคืบหน้า แต่ถ้าคุณต้องการข้อมูลเปอร์เซ็นต์
dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv
แทนที่100M
ข้างต้นด้วยขนาดที่แท้จริงของไฟล์ต้นฉบับของคุณ
ในขณะที่scp
แทบจะไม่สามารถแสดงความคืบหน้าปัจจุบันใช้dd
กับpv
เป็นชิ้นส่วนของเค้ก
ssh onemach@myotherhost dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv
มีเครื่องมือใหม่ที่เรียกว่า cv ที่สามารถค้นหา descriptor ใด ๆ ที่เกี่ยวข้องกับคำสั่งที่รันอยู่และแสดงความคืบหน้าและความเร็ว: https://github.com/Xfennec/cv
cv -w
แสดงผลสถิติสำหรับการดำเนินการ cp, mv ฯลฯ ทั้งหมด
watch cv -q
แม้จะเป็นผู้
cp
คือการคัดลอกไดเรกทอรีซ้ำหรือไม่
อย่างที่หลายคนบอกว่า cp ไม่รวมฟังก์ชั่นนี้
เพียงแค่โยน $ 0.02 ของฉันสิ่งที่ฉันมักจะทำกับสถานการณ์การคัดลอกเล็กน้อย (เช่นไม่มี-R
):
ดูว่าไฟล์มีขนาดใหญ่และจำได้
เริ่มการคัดลอก
เปิดเทอร์มินัลอื่น
ทำงานwatch ls -lh DIR
ในไดเรกทอรีที่เป้าหมายอยู่
สิ่งนี้ทำให้ฉันได้รับการปรับปรุงตามขนาดไฟล์เป้าหมายโดยมีความยุ่งยากน้อยที่สุด
เป็นทางเลือกสำหรับสถานการณ์ที่ไม่สำคัญเช่นการคัดลอกไดเรกทอรีซ้ำคุณสามารถใช้watch du -hs DIR
เพื่อดูข้อมูลสรุปขนาด DIR อย่างไรก็ตาม du อาจใช้เวลานานในการคำนวณและอาจทำให้การคัดลอกช้าลงดังนั้นคุณอาจต้องการใช้การ-n INTERVAL
โต้แย้งเพื่อดูว่าการแลกเปลี่ยนเป็นที่ยอมรับ
อัปเดต:ในกรณีที่คุณใช้ wild-cards พร้อมคำสั่งที่ใช้กับ watch du เช่นwatch du -hs backup/*
อย่าลืมอ้างอิง:
watch "du -hs backup/*"
ไม่เช่นนั้นไวด์การ์ดจะขยายได้เพียงครั้งเดียวเมื่อเริ่มต้นการดูดังนั้น du จะไม่ดูไฟล์ / ไดเรกทอรีย่อยใหม่
dd status=progress
เพิ่มตัวเลือกใน GNU Coreutils 8.24+ (Ubuntu 16.04):
dd if=src of=dst status=progress
เทอร์มินัลแสดงประเภทของบรรทัด:
462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s
ดูเพิ่มเติม: คุณติดตามความคืบหน้าของววได้อย่างไร?
หากคุณมี rsync 3.1 หรือสูงกว่า ( rsync --version
) คุณสามารถคัดลอก (cp -Rpn) ในขณะที่รักษาสิทธิ์และความเป็นเจ้าของ, เรียกคืนไดเรกทอรี, "ไม่มีการปิดบัง" และแสดงความคืบหน้าโดยรวม (แทนความคืบหน้าโดยไฟล์) อัตราการคัดลอกและ ( หยาบมาก) เวลาที่เหลือโดยประมาณด้วย:
sudo rsync -a --info=progress2 --no-i-r /source /destination
โปรดทราบว่าจำเป็นต้องใช้ sudo เฉพาะเมื่อจัดการกับไดเรกทอรี / ไฟล์ที่คุณไม่ได้เป็นเจ้าของ นอกจากนี้หากไม่มี--no-i-r
เปอร์เซ็นต์อาจรีเซ็ตเป็นตัวเลขที่ต่ำกว่าในบางช่วงระหว่างการคัดลอก บางที rsync รุ่นที่ใหม่กว่าอาจมีค่าเริ่มต้นเป็น no-ir ด้วย info = progress2 แต่มันไม่ได้อยู่ในเวอร์ชันปัจจุบัน 3.1.2
ฉันพบว่าเปอร์เซ็นต์และเวลาที่เหลืออยู่นั้นเกินความคาดหมายอย่างมากเมื่อคัดลอกไปยังไดเรกทอรีที่มีไฟล์อยู่แล้ว (เช่น. เช่นเมื่อคุณมักจะใช้ cp -n "no clobber")
ใช้เชลล์สคริปต์:
#!/bin/sh
cp_p()
{
strace -q -ewrite cp -- "${1}" "${2}" 2>&1 \
| awk '{
count += $NF
if (count % 10 == 0) {
percent = count / total_size * 100
printf "%3d%% [", percent
for (i=0;i<=percent;i++)
printf "="
printf ">"
for (i=percent;i<100;i++)
printf " "
printf "]\r"
}
}
END { print "" }' total_size=$(stat -c '%s' "${1}") count=0
}
จะมีลักษณะดังนี้:
% cp_p /home/echox/foo.dat /home/echox/bar.dat
66% [===============================> ]
ผู้บัญชาการ Midnight ( mc
) อาจเป็นคำตอบทั้งนี้ขึ้นอยู่กับสิ่งที่คุณต้องการทำ ฉันประหลาดใจที่ยังไม่ได้กล่าวถึง
เครื่องมือที่ชอบpv
หรือrsync
ดีในการแสดงความคืบหน้าของการถ่ายโอนไฟล์ขนาดใหญ่เพียงไฟล์เดียว แต่เมื่อมันมาถึงการคัดลอกทั้งไดเร็กตอรี่ / ทรีให้mc
คำนวณขนาดแล้วแสดงความคืบหน้าอย่างมาก นอกจากนี้ยังมีให้ใช้งานได้ทันทีในระบบส่วนใหญ่
อีกหนึ่งตัวเลือกในการรักษาแอตทริบิวต์อาจเป็น (ถ้าsource
เป็นโฟลเดอร์มันจะถูกสร้างขึ้นในdestination
)
tar -c source | pv -e -t -p -r | tar -C destination -x
หวังว่ามันจะเป็นประโยชน์กับใครบางคน จะมีเวลาการโอนประมาณนี้สามารถทำได้โดยการทำdo -s source
ล่วงหน้าและผ่านมันเป็นพารามิเตอร์-s <size>
pv
-f -
ซ้ำซ้อน tar
เอาต์พุตเริ่มต้นสำหรับc
และอินพุตสำหรับx
คือ stdout และ stdin
คุณสามารถคัดลอกใช้โปรแกรมใดก็ได้ ในเวลาเดียวกันคุณสามารถเริ่มต้นsudo iotop
และดูความเร็วในการอ่าน / เขียนดิสก์ได้โดยไม่ต้องดำเนินการใด ๆ
ตรวจสอบซอร์สโค้ดสำหรับ progress_bar ในที่เก็บ git ด้านล่าง
https://github.com/Kiran-Bose/supreme
ลองใช้แพคเกจสคริปต์ทุบตีที่กำหนดเองสูงสุด
ดาวน์โหลดไฟล์ deb และติดตั้งเป็นการกระจายแบบเดเบียนหรือดาวน์โหลดไฟล์ต้นฉบับแก้ไขและใช้สำหรับ distros อื่น ๆ
ภาพรวมการทำงาน
(1) เปิดแอป ---- Firefox ---- เครื่องคิดเลข ---- การตั้งค่า
(2) จัดการไฟล์ ---- ค้นหา ---- นำทาง ---- เข้าถึงด่วน
|----Select File(s)
|----Inverse Selection
|----Make directory
|----Make file
|----Open
|----Copy
|----Move
|----Delete
|----Rename
|----Send to Device
|----Properties
(3) จัดการโทรศัพท์ ---- ย้าย / คัดลอกจากโทรศัพท์ ---- ย้าย / คัดลอกไปยังโทรศัพท์ ---- ซิงค์โฟลเดอร์
(4) จัดการ USB ---- ย้าย / คัดลอกจาก USB ---- ย้าย / คัดลอกไปยัง USB
pv รู้วิธีดูไฟล์ descriptors ที่ได้รับ pid ไม่ว่าจะเป็น cp หรืออย่างอื่น
จากเอกสาร:
(Linux only): Watching file descriptor 3 opened by another process 1234:
pv -d 1234:3
(Linux only): Watching all file descriptors used by process 1234:
pv -d 1234
ตัวอย่าง:
md5sum file &
[1] + 1271 suspended
pv -d 1271
417MiB 0:00:17 [12,1MiB/s] [============> ] 29% ETA 0:00:53
$ cp file.mov copy.mov &
[2] 3731
$ pv -d 3731
3:/media/windows/file.mov: 754MiB 0:00:04 [97,2MiB/s] [======================> ] 52% ETA 0:00:07
4:/media/windows/copy.mov: 754MiB 0:00:04 [97,3MiB/s] [ <=> ]
pv
ไม่จัดการสิทธิ์แบบเดียวกับที่cp
... (ตามการทดสอบอย่างรวดเร็วหนึ่งที่ฉันพยายาม:pv
ไม่คัดลอกบิตดำเนินการข้าม ..rsync
ได้