ในไดเรกทอรีฉันมีไฟล์ที่มีนามสกุล. dat ฉันต้องการลบไฟล์ดังกล่าวทั้งหมดโดยไม่ต้องลบไฟล์เหล่านั้นออกจากไดเรกทอรี
ฉันพยายามทำให้มันสำเร็จ แต่ก็ไม่ได้ผล
> *.dat
-bash: *.dat: ambiguous redirect
ในไดเรกทอรีฉันมีไฟล์ที่มีนามสกุล. dat ฉันต้องการลบไฟล์ดังกล่าวทั้งหมดโดยไม่ต้องลบไฟล์เหล่านั้นออกจากไดเรกทอรี
ฉันพยายามทำให้มันสำเร็จ แต่ก็ไม่ได้ผล
> *.dat
-bash: *.dat: ambiguous redirect
คำตอบ:
คุณสามารถทำได้:
:|tee -- *.dat
หรือเทียบเท่าzsh(กับmultios):
:>*.dat
แม้ว่าจะเป็นการเปิดไฟล์ทั้งหมดพร้อมกันคุณอาจถึงจำนวนสูงสุดของตัวอธิบายไฟล์ที่เปิดสูงสุดหากมีไฟล์จำนวนมาก
ลอง
for x in *.dat
do
> "$x"
done
โดยทั่วไปแล้วจะวนไฟล์ทั้งหมดโดยดำเนินการ>กับไฟล์เหล่านั้น
หากระบบของคุณมีtruncateยูทิลิตี้ (จาก GNU coreutils) คุณสามารถทำได้
truncate -s 0 -c -- *.dat
การ-s 0ตั้งค่าขนาดเป็นศูนย์ในขณะที่-cป้องกันการสร้างไฟล์ใหม่ที่มีชื่อตามตัวอักษร*.datในกรณีที่ไม่มีการจับคู่ถ้าเปลือกของคุณส่งกลับไม่ได้ขยาย*.datในกรณีที่
--no-createแล้ว (คุณต้องการ-cFreeBSD)
nullglob/ failglobทั้งหมดเนื่องจากฉันไม่เข้าใจดีพอ;)
truncateคำสั่งใน GNU coreutils (ตั้งแต่ 7.0, 2008) แต่คำสั่งนั้นมีต้นกำเนิด (ฉันเชื่อ) ใน FreeBSD (4.2, 2000) และคุณต้องการ-s(ตัวเลือกสั้น ๆ ก็รองรับโดย GNU ตัดทอน) แทนที่จะ--sizeมี ทั้ง FreeBSD และ GNUtruncateสนับสนุน-cตัวเลือกเพื่อหลีกเลี่ยงการสร้างไฟล์หากไม่มีอยู่ มิฉะนั้นการใช้failglob(เพื่อให้ได้พฤติกรรมที่คล้ายกับ zsh / fish / csh / tcsh / thomson-sh) จะสมเหตุสมผลมากกว่าnoglob