ในสภาพแวดล้อม 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
นี่คือการตัดและวางอย่างแท้จริง