ฉันย้ายไฟล์ไปมาเมื่อฉันพิมพ์คำสั่ง โดยไม่ได้ตั้งใจ
mv misc/* *
แทนที่จะmv misc/* .
ไปทุกที่และฉันจะนำกลับมาได้อย่างไรโฟลเดอร์อื่น ๆ จะหายไป?
ฉันย้ายไฟล์ไปมาเมื่อฉันพิมพ์คำสั่ง โดยไม่ได้ตั้งใจ
mv misc/* *
แทนที่จะmv misc/* .
ไปทุกที่และฉันจะนำกลับมาได้อย่างไรโฟลเดอร์อื่น ๆ จะหายไป?
คำตอบ:
*
ผมคิดว่าทุกอย่างไปยังวัตถุที่ผ่านมากลับมาโดยที่สอง หากไม่ใช่ไดเรกทอรีคุณจะได้รับข้อผิดพลาด
ไปที่ไดเรกทอรีที่คุณเรียกใช้และเรียกmv
echo *
จากนั้นดูในไดเรกทอรีสุดท้ายที่ถูกพิมพ์
สิ่งที่ฉันคิดว่าเกิดขึ้นมีดังนี้:
คุณmv misc/* *
ถูกขยายโดยเปลือกของคุณไปที่
mv multiple-objects-from-within-misc multiple-objects-from-within-the-current-directory
วัตถุสุดท้ายในลำดับนี้คือเป้าหมายที่ไฟล์และไดเรกทอรีของคุณไป จากความคิดเห็นของคุณฉันคิดว่ามันเป็นtmp
ไดเรกทอรี น่าเสียดายที่อ็อบเจกต์จากmisc
และบนไดเร็กตอรี่ตอนนี้อยู่tmp
รวมกัน (และกับทุกอย่างที่เคยมีมาแล้ว) และคุณไม่สามารถบอกได้อย่างง่ายดายว่าอันไหนมาจากไหน
หากคุณเรียกใช้ ls คุณอาจสังเกตเห็นว่าคุณมีไดเรกทอรีชื่อแล้ว *
ใช่คุณเปลี่ยนชื่อเป็น*
!
เพื่อให้ได้กลับมาใช้ mv อีกครั้ง แต่คุณจะต้องหลบหนี *
mv ./\* ./misc
The \ before * หนีมันไปซึ่งหมายความว่ามันถูกใช้เป็นตัวอักษร * แทนที่จะพยายามจับคู่อย่างอื่น
หากคุณจำไม่ได้ว่าคุณอยู่ที่ไหนในระบบไฟล์ให้ใช้find / -name '\*' 2>/dev/null
เพื่อค้นหา
bash
, dash
, sh
(โดยdash
ปฏิบัติการ) zsh
, และcsh
fish
ไม่มีใครสร้าง*
ไดเรกทอรี
*
ยังคงอยู่และเสียงกรีดร้อง*
mv mv: target '*' is not a directory
วิธีเดียวที่จะได้รับ*
ต้องการ 1) ไดเรกทอรีปัจจุบันว่างเปล่าและ 2) ไดเรกทอรีต้นทางมีไฟล์เดียว
*
ไดเรกทอรี ขอบคุณสำหรับข้อมูลนี้ ฉันดีใจที่ฉันไม่ได้ลงคะแนนคำตอบนี้อย่างไร้สาระอาจเป็นประโยชน์โดยทั่วไป (ในกรณีนี้ แต่เรารู้ตั้งแต่เริ่มต้นไดเรกทอรีปัจจุบันไม่ว่าง - misc
อยู่ที่นั่น)