ในสภาพแวดล้อม GUI การลากแล้วปล่อยด้วยการแทนที่จะแทนที่ไฟล์และไดเรกทอรีทั้งหมด (รวมถึงเนื้อหา) ด้วยสิ่งที่กำลังถูกคัดลอกมีวิธีใดที่จะบรรลุผลลัพธ์ที่ใช้งานง่ายเช่นเดียวกันด้วยคำสั่ง 'mv' หรือไม่?
ในสภาพแวดล้อม GUI การลากแล้วปล่อยด้วยการแทนที่จะแทนที่ไฟล์และไดเรกทอรีทั้งหมด (รวมถึงเนื้อหา) ด้วยสิ่งที่กำลังถูกคัดลอกมีวิธีใดที่จะบรรลุผลลัพธ์ที่ใช้งานง่ายเช่นเดียวกันด้วยคำสั่ง 'mv' หรือไม่?
คำตอบ:
mvไม่ได้อยู่กับ
ฟังก์ชั่นหลักของmv(แม้จะมีชื่อ) คือการเปลี่ยนชื่อวัตถุ หนึ่งในการรับประกันที่ UNIX ทำคือการเปลี่ยนชื่อเป็นแบบปรมาณูคุณไม่เคยได้รับอนุญาตให้ดูการเปลี่ยนชื่อที่เสร็จสมบูรณ์บางส่วน การรับประกันนี้จะมีประโยชน์มากถ้าคุณต้องการที่จะเปลี่ยนไฟล์ ( /etc/passwdตัวอย่าง) ว่าโปรแกรมอื่น ๆ อาจจะมองหาที่และคุณต้องการให้พวกเขาเห็นทั้งรุ่นเก่าหรือใหม่ของไฟล์และไม่มีความเป็นไปได้อื่น ๆ แต่ "การเปลี่ยนชื่อซ้ำ ๆ " อย่างที่คุณอธิบายจะทำให้การรับประกันนั้นหยุดลง - คุณสามารถหยุดกลางคันได้และคุณจะมีต้นไม้ครึ่งหลังและอาจเป็นระเบียบ - ดังนั้นมันจึงไม่เหมาะกับปรัชญา mvของ ฉันเดาว่าทำไมmv -rไม่มีตัวตน
(ไม่เป็นไรที่mvทำลายปรัชญานั้นในรูปแบบอื่นที่เล็กกว่าตัวอย่างเช่นmvจริงๆแล้วcpตามด้วยrmเมื่อย้ายไฟล์จากระบบไฟล์หนึ่งไปยังอีกระบบหนึ่ง)
ปรัชญาที่เพียงพอ หากคุณต้องการย้ายแบบเรียกซ้ำ ("drag-drop") แบบทรีจากที่หนึ่งไปอีกที่หนึ่งบนระบบไฟล์เดียวกันคุณจะได้รับประสิทธิภาพและความเร็วmvดังนี้ (ตัวอย่าง):
cp -al source/* dest/ && rm -r source/*
การ-lตั้งค่าสถานะเพื่อcpหมายถึง "สร้างฮาร์ดลิงก์แทนการคัดลอก" - เป็นการสร้างชื่อไฟล์ใหม่ที่มีประสิทธิภาพซึ่งชี้ไปยังข้อมูลไฟล์เดียวกับชื่อไฟล์เก่า สิ่งนี้ใช้งานได้กับระบบไฟล์ที่รองรับการเชื่อมโยงอย่างหนักเท่านั้นดังนั้นระบบไฟล์ UNIX-ish ใด ๆ ก็สามารถใช้งานได้ แต่มันจะไม่ทำงานกับ FAT
&&หมายถึง "เพียงเรียกใช้คำสั่งต่อไปนี้ถ้าคำสั่งก่อนหน้าประสบความสำเร็จ" หากต้องการคุณสามารถเรียกใช้คำสั่งสองคำสั่งทีละคำสั่งได้
ฉันไม่คิดว่าคุณสามารถทำซ้ำพฤติกรรมการลากที่คุณอธิบายได้mvเนื่องจากไดเรกทอรีย่อยที่ไม่ว่างในเป้าหมายจะไม่ถูกแทนที่
อาจจะrsync? สิ่งที่ชอบrsync -a -r source/ target/? เรียกใช้ด้วยการ-v -nทำแบบ verbose dry-run ก่อนเพื่อให้แน่ใจว่าทำในสิ่งที่คุณต้องการ
mv -f /path/to/source/folder/* /destination/folder/
จะย้ายทุกอย่างใน / path / to / source / โฟลเดอร์รวมถึงไฟล์และไดเรกทอรีไปยัง / ปลายทาง / โฟลเดอร์
และจะเขียนทับไฟล์และไดเรกทอรีที่มีอยู่
คุณอาจต้องการเปลี่ยนคำตอบที่ถูกต้องสำหรับสิ่งนี้:
https://github.com/iaindooley/pickdrop
ตัวอย่าง:
พูดว่าฉันมี:
test/
test/index.php
test/images/
test/images/a.jpg
test/images/thing.png
และฉันต้องการย้ายสิ่งเหล่านี้ไปยัง / ไซต์
ดังนั้นดูเหมือนว่า:
site/
site/public/
site/public/index.php
site/public/a.jpg
site/public/thing.png
ฉันไปได้:
cd images &&
pick a.jpg thing.png
cd .. &&
pick index.php &&
cd .. &&
mkdir site &&
mkdir site/public &&
cd site/public &&
drop
นี่คือการตัดและวางอย่างแท้จริง