2012-07-09 55 views
0

我有一個簡單的egrep的命令,通過在當前目錄中的所有文件搜索包含單詞「錯誤」行:Unix egrep查看文件夾信息?

egrep -i "error" * 

該命令也將通過子目錄爲好。以下是整個文件夾的示例:

/Logfile_20120630_030000_ID1.log 
/Logfile_20120630_030001_ID2.log 
/Logfile_20120630_030005_ID3.log 
/subfolder/Logfile_20120630_031000_Errors_A3.log 
/subfolder/Logfile_20120630_031001_Errors_A3.log 
/subfolder/Logfile_20120630_031002_Errors_A3.log 
/subfolder/Logfile_20120630_031003_Errors_A3.log 

頂部目錄中的日誌文件包含「error」行。但「子文件夾」目錄中的日誌文件不包含帶有「錯誤」的行。 (只在文件名中)

所以我得到的問題是egrep命令似乎在查看「子文件夾」中的信息。我的結果會得到一塊似乎是二進制塊的塊,然後是頂級文件夾日誌文件中包含單詞「錯誤」的文本行。

如果我刪除了「子文件夾」下的所有文件,但並未刪除文件夾本身,我會得到完全相同的結果。

那麼Unix是否在一個文件夾內保存文件歷史信息?

該問題已通過運行修正: 查找。 -type f | egrep -i「error」*

但我仍然不明白爲什麼它是一個問題。我在SunOS上運行C shell。

回答

1
egrep -i error * 

*元字符匹配ANY文件名。目錄也是文件。 *由shell擴展到當前目錄中的任何和所有文件,這通常稱爲globbing。

set noglob 

關閉該行爲。但是,在您的目錄中不太可能存在名爲*的文件,因此在此示例中,該命令將找不到任何類型的文件。順便說一句 - 不要創建一個名爲*的文件來測試它,因爲名爲*的文件可能會導致各種有趣和不需要的事情發生。想想當你試圖刪除文件時會發生什麼? rm '*'將是正確的命令,但如果你或別人做了rm *不假思索,那麼你有問題...

+0

感謝您的答覆。我看到egrep如何將目錄當作文件來對待。我只是好奇究竟究竟是怎樣追蹤歷史的。 – 2012-07-13 18:43:33

+0

我也注意到,當你有一個包含文件的目錄,然後刪除它下面的所有文件時,目錄文件大小不會改變。我猜這是我上面提到的同樣的歷史信息。我想了解更多關於它如何在Unix中工作的信息。我用inode指針猜測它的東西,但我認爲刪除文件時刪除了這些指針。 ??? – 2012-07-13 18:45:53

+0

這些文件確實被刪除了(如果沒有更多鏈接,這些文件將被釋放);沒有保存專用的文件歷史記錄信息,只是將目錄條目標記爲空閒,而名稱不會被覆蓋,所以它們會保留在目錄文件中,直到重新使用條目。 – Armali 2014-04-02 13:30:41