我正在尝试创建一个数组变量,其中包含要在小脚本中使用的文件列表,需要文件的完整路径。环顾四周,我尝试了这样的事情:
find /path/ -t f | grep randomString
事实证明,这仅返回我需要的一些文件,因此我尝试使用wc -l
前面的命令和 with ls -R /path/ | grep randomString
,获得不同的行数(相差超过 100 行,所以我正在计算 ls - 中的目录) R 出)。我想知道为什么find
没有返回预期的结果。有任何想法吗?
答案1
find
列出目录树中的所有文件。ls -R
实际上列出了更少的文件:它省略了点文件——你需要ls -AR
将它们包括在内。
如果您没有找到所需的文件,有以下几种可能性:
- 您在输出中错过了它们。使用搜索命令(例如
find … | less
,使用/
less 中的键)。请记住, 的输出find
未排序。 - 这些文件实际上并不是您所认为的那样。如果您不确定大小写,请执行不区分大小写的搜索。
- 您正在查找的文件实际上是符号链接。使用
find -xtype f
代替find -type f
将符号链接按照它们指向的文件进行分类。 - 这些文件位于目录的符号链接下。用于
find -L
遍历符号链接,但要小心:如果您有指向位于大型层次结构顶部的目录的符号链接,则这可能会搜索大量文件。
在任何情况下都不会ls -R
找到不存在的文件find
。
ls -R
您无法轻松比较和的输出中的行数find
:
ls -R
省略点文件,find
不会。ls -R
每个子目录(根目录除外)总共有三行,相比之下find -type f
:目录条目、将该目录的列表与上一行分隔开的空行、以及目录名称后跟的标题行冒号。
答案2
当您执行 ls -R 时,您将获得列表中的目录名称作为输出。