'mv' เทียบเท่ากับการลากแล้วปล่อยด้วยการแทนที่?


19

ในสภาพแวดล้อม GUI การลากแล้วปล่อยด้วยการแทนที่จะแทนที่ไฟล์และไดเรกทอรีทั้งหมด (รวมถึงเนื้อหา) ด้วยสิ่งที่กำลังถูกคัดลอกมีวิธีใดที่จะบรรลุผลลัพธ์ที่ใช้งานง่ายเช่นเดียวกันด้วยคำสั่ง 'mv' หรือไม่?

คำตอบ:


20

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

&&หมายถึง "เพียงเรียกใช้คำสั่งต่อไปนี้ถ้าคำสั่งก่อนหน้าประสบความสำเร็จ" หากต้องการคุณสามารถเรียกใช้คำสั่งสองคำสั่งทีละคำสั่งได้


ให้ข้อมูลอย่างมาก ขอบคุณมาก!
7089

4

ฉันไม่คิดว่าคุณสามารถทำซ้ำพฤติกรรมการลากที่คุณอธิบายได้mvเนื่องจากไดเรกทอรีย่อยที่ไม่ว่างในเป้าหมายจะไม่ถูกแทนที่

อาจจะrsync? สิ่งที่ชอบrsync -a -r source/ target/? เรียกใช้ด้วยการ-v -nทำแบบ verbose dry-run ก่อนเพื่อให้แน่ใจว่าทำในสิ่งที่คุณต้องการ


3

mv -f /path/to/source/folder/* /destination/folder/

จะย้ายทุกอย่างใน / path / to / source / โฟลเดอร์รวมถึงไฟล์และไดเรกทอรีไปยัง / ปลายทาง / โฟลเดอร์

และจะเขียนทับไฟล์และไดเรกทอรีที่มีอยู่


2
เฉพาะไดเรกทอรีที่ว่างเปล่า
Kevin

1

คุณอาจต้องการเปลี่ยนคำตอบที่ถูกต้องสำหรับสิ่งนี้:

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

นี่คือการตัดและวางอย่างแท้จริง


เด็ดมากและคุ้มค่าที่จะดู อย่างไรก็ตามคำถามนี้เกี่ยวกับ 'mv' โดยเฉพาะดังนั้นฉันคิดว่าฉันจะทิ้งคำตอบที่ถูกต้องไว้เป็นคำตอบที่อธิบายปรัชญาเบื้องหลัง mv โดยละเอียด ขอบคุณสำหรับการสนับสนุนนี้แม้ว่ามีประโยชน์มากแน่นอน
7089

สิ่งที่น่าสังเกตอีกอย่างจาก readme: "มันไม่แข็งแรงเลย - เก็บของที่คุณเก็บไว้ใน ~ / .pick จนกว่าคุณจะโทรไปที่เวลาที่มันใช้เส้นทางของไฟล์ใน ~ / .pick เพื่อสร้างไฟล์ปฏิบัติการใหม่ ~ / .drop เพื่อคัดลอกแต่ละไฟล์ที่คุณเลือกไปยังไดเรกทอรีการทำงานปัจจุบัน "
user7089
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.