คุณเป็นจริงท่อrm
ของการส่งออกfind
การป้อนข้อมูลของ สิ่งที่คุณต้องการคือการใช้ผลลัพธ์ของการfind
เป็นอาร์กิวเมนต์เพื่อrm
:
find -type f -name '*.sql' -mtime +15 | xargs rm
xargs
เป็นคำสั่งที่ "แปลง" อินพุตมาตรฐานเป็นอาร์กิวเมนต์ของโปรแกรมอื่นหรือตามที่วางไว้บนman
หน้าอย่างแม่นยำมากขึ้น
สร้างและดำเนินการบรรทัดคำสั่งจากอินพุตมาตรฐาน
โปรดทราบว่าหากชื่อไฟล์สามารถมีอักขระช่องว่างคุณควรแก้ไขให้ถูกต้อง:
find -type f -name '*.sql' -mtime +15 -print0 | xargs -0 rm
แต่จริงๆแล้วfind
มีทางลัดสำหรับสิ่งนี้: -delete
ตัวเลือก:
find -type f -name '*.sql' -mtime +15 -delete
โปรดระวังคำเตือนต่อไปนี้ในman find
:
Warnings: Don't forget that the find command line is evaluated
as an expression, so putting -delete first will make find try to
delete everything below the starting points you specified. When
testing a find command line that you later intend to use with
-delete, you should explicitly specify -depth in order to avoid
later surprises. Because -delete implies -depth, you cannot
usefully use -prune and -delete together.
PS โปรดทราบว่าการวางท่อโดยตรงกับrm
ไม่ใช่ตัวเลือกเพราะrm
ไม่คาดหวังชื่อไฟล์ในอินพุตมาตรฐาน สิ่งที่คุณกำลังทำอยู่คือการส่งกลับ