จะล้างเนื้อหาของไฟล์ทั้งหมดด้วยนามสกุล. dat ในไดเรกทอรีได้อย่างไร?


1

ในไดเรกทอรีฉันมีไฟล์ที่มีนามสกุล. dat ฉันต้องการลบไฟล์ดังกล่าวทั้งหมดโดยไม่ต้องลบไฟล์เหล่านั้นออกจากไดเรกทอรี

ฉันพยายามทำให้มันสำเร็จ แต่ก็ไม่ได้ผล

> *.dat
-bash: *.dat: ambiguous redirect

คำตอบ:


3

คุณสามารถทำได้:

:|tee -- *.dat

หรือเทียบเท่าzsh(กับmultios):

:>*.dat

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


3

ลอง

for x in *.dat
do
    > "$x"
done

โดยทั่วไปแล้วจะวนไฟล์ทั้งหมดโดยดำเนินการ>กับไฟล์เหล่านั้น


3

หากระบบของคุณมีtruncateยูทิลิตี้ (จาก GNU coreutils) คุณสามารถทำได้

truncate -s 0 -c -- *.dat

การ-s 0ตั้งค่าขนาดเป็นศูนย์ในขณะที่-cป้องกันการสร้างไฟล์ใหม่ที่มีชื่อตามตัวอักษร*.datในกรณีที่ไม่มีการจับคู่ถ้าเปลือกของคุณส่งกลับไม่ได้ขยาย*.datในกรณีที่


แม้ว่าตอนนี้จะมีtruncateคำสั่งใน GNU coreutils (ตั้งแต่ 7.0, 2008) แต่คำสั่งนั้นมีต้นกำเนิด (ฉันเชื่อ) ใน FreeBSD (4.2, 2000) และคุณต้องการ-s(ตัวเลือกสั้น ๆ ก็รองรับโดย GNU ตัดทอน) แทนที่จะ--sizeมี ทั้ง FreeBSD และ GNU truncateสนับสนุน-cตัวเลือกเพื่อหลีกเลี่ยงการสร้างไฟล์หากไม่มีอยู่ มิฉะนั้นการใช้failglob(เพื่อให้ได้พฤติกรรมที่คล้ายกับ zsh / fish / csh / tcsh / thomson-sh) จะสมเหตุสมผลมากกว่าnoglob
Stéphane Chazelas

อา ฉันเห็นคุณพูดถึง--no-createแล้ว (คุณต้องการ-cFreeBSD)
Stéphane Chazelas

ขอบคุณ @ StéphaneChazelasฉันได้เขียนขึ้นใหม่เพื่อพยายามรวมความคิดเห็นของคุณ - หลีกเลี่ยงnullglob/ failglobทั้งหมดเนื่องจากฉันไม่เข้าใจดีพอ;)
steeldriver
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.