2013-05-02 92 views
4

我有很多壓縮文件,其中每個包含目錄中的json文件和txt文件。 我想查找目錄中所有壓縮文件中的json文件總數。Grep內部的多個目錄和壓縮文件

要深入研究,我有很多這樣的目錄。
如何查找所有目錄中所有壓縮文件中的json文件總數?

+4

像這樣的東西可能會工作:找到。 -name'* .zip'| unzip -l | grep「.json」| wc -l – 2013-05-02 19:56:08

+0

有沒有一種方法可以在沒有unzippig的情況下完成? – user1189851 2013-05-02 20:12:11

+3

@ user1189851'unzip -l'僅打印存檔中包含的文件的名稱。不,如果不解壓縮至少這麼多,你就無法做到。 – Kevin 2013-05-02 20:18:53

回答

2

通過find命令,您可以輕鬆遍歷每個您擁有的目錄,並與指定模式(如*.zip)匹配。

當你去通過列表find回報(一for循環會在這裏好),你需要列出每個存檔文件(你會不會以解壓縮文件,這是好的),而你'列出文件,你可以做一個簡單的grep找到.json模式和管道輸出到wc -l這將給你一個「行數」 - 在這種情況下,它將代表.json文件的數量。

在整個每次迭代過程中,您都需要計算這個數量並將其添加到「總數」計數中,然後您可以稍後輸出。

一個擴大的這個樣本是:

total=0; 
for file in `find . -name '*.zip'`; do 
    count=`unzip -l $file | grep '.json' | wc -l`; 
    total=`expr $total + $count`; 
done; 
echo "Total Json Files: $total"; 

此示例假設您正在使用zip你的文件存檔。如果您使用tar之類的東西,則需要使用其文件列表參數(tar -t)。

1

zgrep的工作方式像grep,但處理zip文件。在linux上它是一個shell包裝器,在bsd和osx上它是一個二進制文件。

+2

這隻適用於使用gzip和ncompress(或類似的)創建的文件,而不是實際的ZIP文件。 – 2013-07-18 04:34:09

+0

甚至更​​糟糕的是,zgrep可能*看起來可以工作,但在這種情況下,它只會在每個zip壓縮文件的一個文件中grep。當我嘗試在每個zip文件中使用多個文件進行grep時,我感到非常困惑。 – Mikkel 2015-09-09 07:02:22

相關問題