2013-02-19 85 views
0

我有一个包含许多文件(无子目录)的目录。我希望find这些文件。下面让我关闭:当使用`find`命令时排除指定的目录

$ find docs 
docs 
docs/bar.txt 
docs/baz.txt 
docs/foo.txt 

我不希望目录本身列出。我能做到这一点,而不是:

$ find docs -type f 
docs/bar.txt 
docs/baz.txt 
docs/foo.txt 

使用通配符,似乎这样的伎俩还有:

$ find docs/* 
docs/bar.txt 
docs/baz.txt 
docs/foo.txt 

我的理解是,以不同的方式工作,这些:与-type,我们提供一个单一的路径为find,而在后一种情况下,我们使用通配符扩展将多条路径传递给find。是否有理由相互支持一种方法?

回答

1

你有一个UNIX标签,你的例子有一个*。一些版本的查找有一个问题。 如果该目录没有子目录。 供参考。

一般先PARMS找到必须有一个或多个目录的列表

find /dir1 /dir2 -print 

查找是递归的 - 所以它会按照每个目录下上市的每一件事情,符号链接,目录,管道,并定期文件。这可能会让人困惑。型划定搜索

find /dir1 /dir2 -type f -print 

您也可以找到做额外的输出例子:有它的RM文件超过30天的,例如:

find /dir1 /dir2 -type f -mtime +30 -exec rm {} \; 

或者给完整的信息来源

find /dir1 /dir2 -type f -mtime +30 -exec ls -l {} \; 
find /dir1 /dir2 -type f -mtime +30 -ls # works on some systems 

回答你的问题:因为find可能是危险的当你使用rm等令人讨厌的命令时,总是完全指定每个目录,文件类型等。你可能忘记了你最喜欢的目录也在那里。或者用于生成薪水的人。只需环视四周,即可使用通配符。

使用*

find /path/to/files -type f -name 'foo*' 

- 围绕在他们在某些UNIX系统上的明星串抽动或报价。

+0

的每一个子目录的列表“你有UNIX标记,而你的例子有一个*。某些版本的find有问题。“你能详细说明一下吗? – davidchambers 2013-02-19 03:06:07

+1

在Solaris和HPUX上查找* -type f可能会在尝试统计一个真正为常规文件的“目录”时出现统计错误。 *扩展为当前目录中的任何文件名。称为globbing。使用*构造文件名称。在答案中编辑 - – 2013-02-19 03:11:55

0
find docs -type f 

将让你的文档的每一个子目录中的每一个非目录文件的列表

find docs/* 

将让你的每个文件和文档

相关问题