ในไดเรกทอรีฉันมีไฟล์ที่มีนามสกุล. 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
แล้ว (คุณต้องการ-c
FreeBSD)
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