2013-03-14 54 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 

这符合标准查找语法和你想要做什么。