0

我有一个包含许多文件的目录(没有子目录)。我希望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. 有理由支持一种方法而不是另一种方法吗?

4

2 回答 2

1

你有一个 UNIX 标签,你的例子有一个 *. 某些版本的 find 对此有问题。如果目录没有子目录。供参考。

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

find /dir1 /dir2 -print

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

find /dir1 /dir2 -type f -print

您还可以使用 find 做额外的输出示例:让 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 系统中,带有星号的字符串周围的 tic 或引号。

于 2013-02-19T02:45:28.740 回答
0
find docs -type f

将为您提供 docs 的每个子目录的每个非目录文件的列表

find docs/*

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

于 2014-03-11T23:48:49.040 回答