使用`find`命令时排除指定的目录

时间:2013-02-19 01:53:50

标签: shell unix command-line 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。是否有理由支持一种方法而不是另一种方法?

2 个答案:

答案 0 :(得分:1)

你有一个UNIX标签,你的例子有一个*。某些版本的find存在问题。 如果目录没有子目录。 FYI。

通常,要查找的第一个参数必须是目录或目录列表

find /dir1 /dir2 -print

查找是递归的 - 所以它将跟踪每个目录,列出每个东西,符号链接,目录,管道和常规文件。这可能令人困惑。 -type界定您的搜索

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

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

使用*

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

- 在某些UNIX系统中围绕字符串的字符串或引号。

答案 1 :(得分:0)

find docs -type f

将为您提供docs

的每个子目录中每个非目录文件的列表
find docs/*

将为您提供每个文件和文档的每个子目录

的列表