เป็นไปได้ไหมที่จะย้ายไฟล์ตามขนาด
ชอบ:
mv /path/to/x /path/to/y
โดยที่ x และ y เป็นไดเรกทอรี อย่างไรก็ตามไฟล์ที่มีขนาดเล็กกว่าจะถูกย้ายก่อน หรือไฟล์ที่ใหญ่กว่าก่อน
นอกจากนี้ยังมีเหตุผลที่จะไม่ทำเช่นนี้หรือไม่?
เป็นไปได้ไหมที่จะย้ายไฟล์ตามขนาด
ชอบ:
mv /path/to/x /path/to/y
โดยที่ x และ y เป็นไดเรกทอรี อย่างไรก็ตามไฟล์ที่มีขนาดเล็กกว่าจะถูกย้ายก่อน หรือไฟล์ที่ใหญ่กว่าก่อน
นอกจากนี้ยังมีเหตุผลที่จะไม่ทำเช่นนี้หรือไม่?
คำตอบ:
คุณสามารถทำได้เช่นนี้ (ยังไม่ทดลอง):
for file in `ls --sort=size /path/to/x/*`; do mv $file /path/to/y/; done
คุณสามารถกลับรายการเรียงลำดับโดยเพิ่มพารามิเตอร์ --reverse ไปยัง ls หากชื่อไฟล์มีช่องว่างคุณอาจต้องอ้างถึง $ file:
... mv "$file" /path/to/y/ ...
หากชื่อไฟล์อาจมีเครื่องหมายคำพูดคู่แสดงว่าคุณกำลังมีปัญหา
อาจเป็นไปได้ว่าสิ่งต่อไปนี้สามารถใช้งานได้ แต่ขึ้นอยู่กับการใช้ mv และอาจไม่ทำงานกับไฟล์จำนวนมาก (และยังคงมีปัญหาเกี่ยวกับช่องว่างและ / หรือเครื่องหมายคำพูดในชื่อไฟล์):
mv `ls --sort=size /path/to/x/*` /path/to/y/
คุณถามว่า: "มีเหตุผลที่จะไม่ทำเช่นนี้หรือไม่" คำถามควรกลับรายการ มีเหตุผลในการทำเช่นนี้หรือไม่? หากคุณมีเหตุผลไปข้างหน้าและทำมัน
หากคุณกำลังย้ายไฟล์ภายในระบบไฟล์เดียวดังนั้นข้อมูลในไฟล์จะไม่ถูกย้าย - เฉพาะชื่อของไฟล์ที่จะถูกย้ายระหว่างไดเรกทอรี ดังนั้นคุณสามารถย้ายไฟล์ 10 กิกะไบต์ได้ทันที (ภายในระบบไฟล์เดียว) ดังนั้นการไปที่ปัญหาในการค้นหาขนาดของไฟล์ทั้งหมดเพื่อให้ไฟล์ที่มีขนาดเล็กที่สุดสามารถย้ายได้ก่อนจะเสียเวลา (ในกรณีนี้)
เหตุผลที่จะไม่ทำเช่นนั้นก็คือจะต้องให้คุณสร้างดัชนีของไฟล์ทั้งหมดก่อนที่จะย้าย จากนั้นรับขนาดของไฟล์ทั้งหมดและจัดเรียง ก่อนที่คุณจะสามารถเริ่มทำสำเนาได้
และไม่มีการรับประกันว่าสถานะที่คุณคำนวณก่อนกระบวนการคัดลอกจะเหมือนกันทุกประการในระหว่างกระบวนการคัดลอกทำให้ไม่มีจุดหมาย