2013-03-14 55 views
0

今天我在使用「find」命令。這在使用上有點令人困惑。Linux命令find usage confuse

問題:我想要統計主目錄下有多少個gz文件。但是,主目錄也有子目錄。例如/ mainDir/Dir1/1// mainDir/Dir2/1/2012。在每個子文件夾下,有幾個gz文件。

我使用命令1,它工作正常。

首先,我去了主目錄:

ls -R . | find -name "*.gz" | wc -l 

但是,如果我用命令2,它返回0:

ls -R /home/user1/data1/2012/mainDir | find -name "*.gz" | wc -l 

的原因是什麼,任何一個有一些想法?

感謝,

+0

我其實並不理解你使用ls的目的。 – tink 2013-03-14 00:14:19

+0

'find'命令不讀取其標準輸入;把任何東西都給管道是沒有意義的。您還需要在命令名稱「find」和動作參數(如'-name'* .gz'')之間提供目錄名稱(或多個名稱)。 – 2013-03-14 00:14:21

+0

您不能將名稱傳送到'find',它不會讀取其標準輸入。如果你沒有在命令行上給它一個起始目錄,它將從當前目錄開始。 – Barmar 2013-03-14 00:14:22

回答

4

你不需要ls。只需find . -name '*.gz' | wc -lfind /home/user1/data1/2012/mainDir -name '*.gz' | wc -l。連字符選項(如-name)之前的find命令中的單詞是要在其中搜索的目錄的名稱。

+0

準確地說,find命令執行自己的文件搜索,遍歷子目錄。 'ls'只需列出當前目錄中的文件。 – 2013-03-14 00:13:14

+0

我使用「ls」是因爲我想獲取每個文件的完整路徑。任何建議? – sommcewce 2013-03-14 05:20:29

+0

是的,只要不將'find'管道到'wc',你就會得到每個文件相對於你提供的任何目錄名稱的路徑。這是因爲'find'的默認行爲與使用'-print'選項結束時的行爲相同。還有其他選項,例如'-ls'。如果您希望安排在一個路徑中同時獲得路徑和總數,您甚至可以使用「tee」。 – minopret 2013-03-14 05:43:14

0

如何:

find /home/user1/data1/2012/mainDir -name "*.gz" | wc -l 

這符合標準查找語法和你想要做什麼。