ทำไมถึงเจอ - ประเภท f` ใช้เวลานานกว่า `หา '
ดูเหมือนว่าfindจะต้องตรวจสอบว่าเส้นทางที่กำหนดนั้นสอดคล้องกับไฟล์หรือไดเรกทอรีอยู่แล้วเพื่อที่จะเดินเนื้อหาของไดเรกทอรีซ้ำ ๆ นี่คือแรงบันดาลใจบางอย่างและสิ่งที่ฉันทำในพื้นที่เพื่อโน้มน้าวตัวเองว่าfind . -type fช้ากว่าfind .จริง ๆ ฉันยังไม่ได้ขุดลงใน GNU ค้นหาซอร์สโค้ดเลย ดังนั้นฉันจึงสำรองไฟล์บางไฟล์ใน$HOME/Workspaceไดเรกทอรีของฉันและไม่รวมไฟล์ที่เป็นส่วนหนึ่งของโครงการหรือไฟล์ควบคุมเวอร์ชัน ดังนั้นฉันจึงรันคำสั่งต่อไปนี้ซึ่งดำเนินการอย่างรวดเร็ว % find Workspace/ | grep -v '/vendor\|/node_modules/\|Workspace/sources/\|/venv/\|/.git/' > ws-files-and-dirs.txt findไปป์grepอาจเป็นรูปแบบที่ไม่ดี แต่ดูเหมือนว่าวิธีที่ตรงที่สุดในการใช้ตัวกรอง regex เมื่อตะกี้ คำสั่งต่อไปนี้มีเฉพาะไฟล์ในผลลัพธ์การค้นหาและใช้เวลานานขึ้นอย่างเห็นได้ชัด % find Workspace/ -type f | grep -v '/vendor\|/node_modules/\|Workspace/sources/\|/venv/\|/.git/' > ws-files-only.txt ฉันเขียนโค้ดเพื่อทดสอบประสิทธิภาพของคำสั่งทั้งสองนี้ (ด้วยdashและtcshเพื่อแยกแยะผลกระทบใด ๆ ที่เชลล์อาจมีแม้ว่าจะไม่ควรมี) tcshผลที่ได้รับการละเว้นเพราะพวกเขากำลังหลักเดียวกัน ผลลัพธ์ที่ฉันได้รับแสดงให้เห็นถึงโทษประสิทธิภาพ 10% -type f นี่คือผลลัพธ์ของโปรแกรมที่แสดงจำนวนเวลาที่ใช้ในการดำเนินการซ้ำ 1,000 คำสั่งต่างๆ …