ฉันกำลังทำงานกับบางสิ่งที่ฉันจัดเก็บข้อมูลไว้ในไฟล์ แต่ทุกครั้งที่ฉันเรียกใช้สคริปต์มันจะถูกผนวกเข้ากับไฟล์ก่อนหน้า
ฉันต้องการความช่วยเหลือเกี่ยวกับวิธีลบไฟล์ถ้ามีอยู่แล้ว
ฉันกำลังทำงานกับบางสิ่งที่ฉันจัดเก็บข้อมูลไว้ในไฟล์ แต่ทุกครั้งที่ฉันเรียกใช้สคริปต์มันจะถูกผนวกเข้ากับไฟล์ก่อนหน้า
ฉันต้องการความช่วยเหลือเกี่ยวกับวิธีลบไฟล์ถ้ามีอยู่แล้ว
คำตอบ:
ไม่ต้องตรวจสอบว่ามีไฟล์อยู่หรือไม่ลองลบออก
rm -f /p/a/t/h
# or
rm /p/a/t/h 2> /dev/null
โปรดทราบว่าคำสั่งที่สองจะล้มเหลว (ส่งคืนสถานะการออกที่ไม่ใช่ศูนย์) หากไฟล์ไม่มีอยู่ แต่คำสั่งแรกจะประสบความสำเร็จเนื่องจากตัวเลือก-f
(ย่อมาจาก--force
) นี่อาจเป็นรายละเอียดที่สำคัญทั้งนี้ขึ้นอยู่กับสถานการณ์
แต่มีโอกาสมากขึ้นหากคุณต่อท้ายไฟล์เพราะสคริปต์ของคุณใช้>>
เพื่อเปลี่ยนเส้นทางบางสิ่งไปยังไฟล์ เพียงแค่เปลี่ยนด้วย>>
>
เป็นการยากที่จะพูดเนื่องจากคุณไม่ได้ให้รหัส
โปรดทราบว่าคุณสามารถทำสิ่งที่ชอบtest -f /p/a/t/h && rm /p/a/t/h
แต่การทำเช่นนั้นไม่มีจุดหมายอย่างสมบูรณ์ มีความเป็นไปได้ค่อนข้างมากที่การทดสอบจะกลับเป็นจริง แต่ / p / a / t / h จะล้มเหลวก่อนที่คุณจะพยายามลบมันหรือแย่กว่านั้นการทดสอบจะล้มเหลวและ / p / a / t / h จะถูกสร้างขึ้น ก่อนที่คุณจะรันคำสั่งถัดไปซึ่งคาดว่าจะไม่มีอยู่ ความพยายามนี้เป็นเงื่อนไขการแข่งขันแบบคลาสสิก อย่าทำมัน
rm /p/a/t/h 2> /dev/null
จะไม่เก็บรหัสส่งคืน ( echo $?
) เป็น 0 หากไม่มีไฟล์อยู่ นั่นจะทำให้งานของเจนกินส์ล้มเหลวเพียงเพราะเราพยายามลบไฟล์ที่ไม่มีอยู่
noclobber
ใน bash) หรืออาจจะเปลี่ยนไฟล์ที่ยังหลงเหลืออยู่ดังนั้นการเปลี่ยนเส้นทางล้มเหลวหากไฟล์นั้นมีอยู่ (ไม่หลีกเลี่ยงสภาพการแข่งขัน) แต่สิ่งที่จะทำคือทำให้แมลงมีความละเอียดยิ่งขึ้น
อีกหนึ่งบรรทัดคำสั่งที่ฉันใช้คือ:
[ -e file ] && rm file
หากคุณต้องการเพิกเฉยขั้นตอนในการตรวจสอบว่ามีไฟล์อยู่หรือไม่คุณสามารถใช้คำสั่งที่ค่อนข้างง่ายซึ่งจะลบไฟล์หากมีอยู่และไม่เกิดข้อผิดพลาดหากไม่มีอยู่
rm -f xyz.csv
-f
มันจะไม่ผิดพลาด คำตอบนี้ช่วยฉันขอบคุณ
ซับเชลล์สคริปต์หนึ่งสคริปต์เพื่อลบไฟล์หากมีอยู่แล้ว (ขึ้นอยู่กับคำตอบของ Jindra Helcl):
[ -f file ] && rm file
หรือด้วยตัวแปร:
#!/bin/bash
file="/path/to/file.ext"
[ -f $file ] && rm $file
บางสิ่งเช่นนี้จะได้ผล
#!/bin/sh
if [ -fe FILE ]
then
rm FILE
fi
- ตรวจสอบว่ามันเป็นไฟล์ปกติหรือไม่
-e ตรวจสอบว่ามีไฟล์อยู่หรือไม่
รู้เบื้องต้นเกี่ยวกับถ้าสำหรับข้อมูลเพิ่มเติม
แก้ไข: -ใช้กับ -f ซ้ำซ้อนหากใช้ -f เพียงอย่างเดียวก็ควรทำงานเช่นกัน
-a
เลิกใช้แล้วใช้-e
แทน
-f
ปลอดภัยในการใช้งาน
-e
ใน-fe
ซ้ำซ้อนขณะที่-f
ยังมีการตรวจสอบการดำรงอยู่ของไฟล์เท่าที่ผมทราบ ..
if [ $( ls <file> ) ]; then rm <file>; fi
นอกจากนี้หากคุณเปลี่ยนเส้นทางเอาต์พุตของคุณด้วย>
แทนที่จะ>>
เป็นการเขียนทับไฟล์ก่อนหน้า
file
ก็เหมือนกัน5 -lt 2
rm $my_file
ใช่ไหม คุณใช้เปลือกอะไร