我有一个包含许多文件的目录(没有子目录)。我希望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
。是否有理由支持一种方法而不是另一种方法?
答案 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/*
将为您提供每个文件和文档的每个子目录
的列表