搜尋回報零筆,很容易被讀成「這個東西不存在」。

它真正說的只有:在這次看過的範圍裡,用這個寫法,沒找到。

會悄悄回零的三種情況

工具跳過了某些檔案。版本控制內建的搜尋,預設會跳過它判定為二進位的檔案,而判定的依據可能只是開頭幾個位元組。一份一行一筆資料的紀錄檔,很容易被誤判成二進位,然後整份被跳過,不會有任何提示。

範圍跟你以為的不一樣。忽略規則、路徑參數、預設的搜尋深度,任何一個都可能讓搜尋只跑了一半。

寫法跟內容的寫法不同。中文檔名在連結裡會變成百分比編碼,設定檔裡的識別碼可能帶著引號或跳脫字元。字面搜尋只找得到字面。

差一點刪錯

那次的零筆,被拿來當作「沒有人引用這份檔案,可以刪」的依據。

結果有一份紀錄檔在引用它,只是那份紀錄檔被當成二進位跳過了。要是照著零筆刪下去,就會刪掉一個還在用的東西,而且要過很久才會有人發現。

現在的做法

搜到零筆,我們當成要再查一次的訊號,不當成結論。

要說一個東西不存在,至少要用兩種原理不同的方法都查不到。一種比對字面,另一種換個角度,例如直接把檔案內容整份倒出來再篩,繞過工具自己做的那個判斷。

證明存在,找到一個就夠了。證明不存在,要把每個角落都看過。