mkdir -p ปลอดภัยอย่างสิ้นเชิงเมื่อสร้างโฟลเดอร์แล้ว


13

พูดว่าฉันมีโฟลเดอร์:

./folder/

ข้างในนั้นมีไฟล์จำนวนมากและแม้กระทั่งไดเรกทอรีย่อย

เมื่อฉันรัน:

mkdir -p folder

ฉันจะไม่เห็นข้อผิดพลาดแม้แต่คำเตือน ดังนั้นเพียงแค่ต้องการยืนยันมีอะไรหายไปหรือเปลี่ยนแปลงในคำสั่งนี้หรือไม่?


2
ความช่วยเหลือของ mkdir บอกว่าไดเรกทอรีจะถูกสร้างขึ้นเฉพาะเมื่อไม่มีอยู่ สิ่งนี้บอกเป็นนัยว่าเมื่อไดเรกทอรีอยู่ไม่มีอะไรทำ
มาร์โก

คำตอบ:


23

mkdir -p จะไม่ให้ข้อผิดพลาดแก่คุณหากมีไดเรกทอรีอยู่แล้วและเนื้อหาของไดเรกทอรีจะไม่เปลี่ยนแปลง

รายการคู่มือสำหรับ mkdir


1
คำตอบนี้ดูเหมือนจะไม่ถูกต้อง mkdir ส่งข้อผิดพลาดออกมาหากมีไดเร็กทอรีอยู่เว้นแต่ใช้แฟล็ก -p
Aaron Cicali

ในข้อผิดพลาดคุณสามารถตรวจสอบรหัสเช่นif(err.code == 'EEXIST')นี้เงื่อนไขนี้จะเป็นจริงถ้าไดเรกทอรีมีอยู่แล้ว
user403173

12

สคริปต์แบบพกพาที่จะพึ่งพา POSIX ซึ่งบอกว่าmkdir's -pตัวเลือก:

ตัวถูกดำเนินการdirแต่ละตัวที่ตั้งชื่อไดเรกทอรีที่มีอยู่จะถูกละเว้นโดยไม่มีข้อผิดพลาด

และหากไม่มีรายงานข้อผิดพลาด-pตัวเลือกจะทำงาน:

สร้างส่วนประกอบชื่อพา ธ กลางที่ขาดหายไป


4

mkdir จะให้ข้อผิดพลาดถ้าไดเรกทอรีมีอยู่แล้ว

mkdir -pจะไม่ให้ข้อผิดพลาดถ้าไดเรกทอรีมีอยู่แล้ว นอกจากนี้ไดเรกทอรีจะไม่ถูกแตะต้องนั่นคือเนื้อหาจะถูกเก็บไว้เหมือนเดิม


0

คุณพูดแบบนั้น

เมื่อฉันรันmkdir -p folderฉันจะไม่เห็นข้อผิดพลาดแม้แต่คำเตือน

คุณจะเห็นข้อผิดพลาดหากคำสั่งล้มเหลว -pธงเพียงยับยั้งข้อผิดพลาดถ้าไดเรกทอรีที่มีอยู่แล้ว

touch x
mkdir -p x
mkdir: cannot create directory ‘x’: File exists

/etcปัญหาเดียวกันจะเกิดขึ้นหากคุณพยายามที่จะสร้างไดเรกทอรีที่เป็นผู้ใช้ปกติในการพูด

สิ่งที่-pจะระงับคือข้อผิดพลาดที่จะถูกเรียกเมื่อไดเรกทอรีเป้าหมายมีอยู่แล้ว

mkdir y
mkdir -p y

อย่างไรก็ตามในทุกกรณีคุณจะไม่สูญเสียอะไรเลยและจะไม่มีอะไรเปลี่ยนแปลง ในสถานการณ์ที่ผิดพลาดคุณจะไม่มีไดเรกทอรีที่คุณคาดหวัง


ดูเหมือนว่ามีความคิดเห็นมากกว่าคำตอบ
G-Man กล่าวว่า 'Reinstate Monica'

ฉันสงสัยเกี่ยวกับเรื่องนี้ แต่ฉันโต้แย้งเฉพาะคำสั่งในคำถามของ OP " เมื่อฉันดำเนินการmkdir -p folderฉันจะไม่เห็นข้อผิดพลาดแม้แต่คำเตือน "
roaima
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.