เกิดอะไรขึ้นเมื่อฉัน“ mv *” ไม่มีข้อผิดพลาดปรากฏขึ้นและตอนนี้เหลือเพียงหนึ่งโฟลเดอร์ ทำไม?


12

คำสั่งที่เรียกใช้งานคือ "mv space *" ในโฟลเดอร์ที่มีข้อมูล 14 GB

mv *

du -hs 

เหมือนกันหมดข้อมูล 14 GB ไปที่ไหน? ฉันทำอะไรลงไป?


ต้องการข้อมูลเพิ่มเติม แพลตฟอร์มใด
Jarmund

4
@ Jarmund ฉันคิดว่ามันปลอดภัยที่จะสมมติ * nix พิจารณาว่าคำสั่งทั้งสองที่กล่าวถึงนั้นเป็นคำสั่งทั่วไปในระบบ Unix-like ในเรื่องนี้ฉันคิดว่ามันปลอดภัยที่จะพูดว่ากระสุนส่วนใหญ่ทำงานเหมือนกัน ดังนั้นเราสามารถอนุมานได้เพียงพอที่จะให้คำตอบที่เป็นประโยชน์แม้ว่าแพลตฟอร์มที่แน่นอนไม่ได้ระบุไว้อย่างชัดเจน
CVn

ที่เกี่ยวข้องถ้าไม่ใช่ล่อลวงที่มียากต่อการค้นหาชื่อ: ฉันใช้ mv ./*/* เพื่อทำให้แบนไดเรกทอรีในระบบแฟ้ม ntfs โดยไม่ต้องเพิ่ม ไปยังจุดสิ้นสุดของคำสั่งตอนนี้ไฟล์ทั้งหมดของฉันจะหายไป
Arjan

ข้อผิดพลาดอีกอย่างที่ต้องพูดถึง คุณไม่ควรเรียกใช้mvหรือใช้cp" " กับข้อมูลที่ไม่น่าเชื่อถือ นั่นเป็นเพราะ " " ขยายตัวและไฟล์ที่มีชื่อเช่น "--verbose" รับอาร์กิวเมนต์บรรทัดคำสั่ง มีอะไรให้ใช้แทน:cp ./* anotherFolder
VasyaNovikov

คำตอบ:


31

ฉันเดาว่า bash จะขยาย wildcard และย้ายทุกโฟลเดอร์ไปยังโฟลเดอร์สุดท้ายของคุณ

ตัวอย่างเช่น:

$ ls
test1  test2  test3  test4

$ mv *

$ ls
test4

$ ls test4
test1  test2  test3

ที่นี่mv *ถูกขยายให้mv test1 test2 test3 test4สอดคล้องกับmv [OPTION]... SOURCE... DIRECTORYรูปแบบ ดังนั้นทุกโฟลเดอร์จะถูกย้ายไปยังโฟลเดอร์สุดท้าย


9
นี้. โดยวิธีการถ้าคุณต้องการที่จะใช้*ในmv(หรือcp) แล้วดู--target-directoryสวิตช์ของพวกเขา มันช่วยให้มั่นใจว่าคุณจะไม่ได้รับสิ่งต่าง ๆ เช่นนี้
CVn

2

ตามที่อธิบายโดย @ssssteffff โดยmv *ที่เชลล์ใช้ส่วนขยาย wildcard จากไฟล์ในไดเร็กทอรีปัจจุบัน อย่างไรก็ตามพฤติกรรมของmvคำสั่งขึ้นอยู่กับจำนวนข้อโต้แย้งที่*ขยายไป หากมีมากกว่าสองอาร์กิวเมนต์อาร์กิวเมนต์สุดท้ายต้องเป็นไดเรกทอรี:

   mv [OPTION]... SOURCE... DIRECTORY

ดังนั้น,

ฉันสร้าง 5 ไฟล์

$ touch 1 2 3 4 5
$ ls
1  2  3  4  5
$ mv *
mv: target ‘5’ is not a directory
$ ls
1  2  3  4  5

ตอนนี้ถ้าฉันสร้างไดเรกทอรีซึ่งเป็นพารามิเตอร์สุดท้ายของการขยายตัวของ wild-card ดังนั้น:

$ mkdir 6
$ mv *
$ ls
6
$ ls 6
1  2  3  4  5

คุณควรตรวจสอบอีกครั้งว่าอาร์กิวเมนต์สุดท้ายคืออะไร

  • หากอาร์กิวเมนต์สุดท้ายเป็นไดเรกทอรีแสดงว่าข้อมูลของคุณอาจปลอดภัย
  • หากจำนวนอาร์กิวเมนต์ทั้งหมดเป็น 2 และอาร์กิวเมนต์สุดท้ายเป็นไดเรกทอรีแสดงว่าข้อมูลของคุณอาจปลอดภัย
  • หากจำนวนอาร์กิวเมนต์ทั้งหมดเป็น 2 และอาร์กิวเมนต์สุดท้ายเป็นไฟล์ไฟล์ที่สองจะหายไปโดยแน่นอน

คุณแน่ใจหรือว่าคุณไม่เห็นข้อผิดพลาดเช่นนี้

 mv: target ‘5’ is not a directory`
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.