我有一个包含许多子目录的目录。这些子目录中的每一个都包含一个具有相同名称的子目录。我想在命令行上生成所有这些文件的列表。因此,例如,如果我有:
dir1/
file1.txt
subdir/
relevant_file1.c
relevant_file2.c
dir2/
file2.txt
subdir/
relevant_file3.txt
relevant_file4.java
dir3/
subdir/
relevant_file5.cpp
irrelevant_subdir/
unimportant_file.txt
dir4/
subdir/
我想要以下输出:
dir1/subdir/relevant_file1.c
dir1/subdir/relevant_file2.c
dir2/subdir/relevant_file3.txt
dir2/subdir/relevant_file4.java
dir3/subdir/relevant_file5.cpp
我认为这应该不会太难使用find
,但我不太能弄明白。很难搜索此问题,因为它是如此具体,并且仅搜索“通过匹配路径查找文件”不会产生任何有用的信息。
尝试这个
你实际上不需要
find
这个。一个简单的ls
就可以了:或者,如果您想对这些文件做一些事情而不仅仅是列出它们,请使用 shell glob:
当然,这将列出任何名为
subdir
. 包括目录、符号链接、设备文件或其他任何东西。如果要将其限制为普通文件,请按照@Carlfind "*/subdir" -type f
的建议使用,或添加文件测试:更好的解决方法
find
是使用-path
选项。当我们有更复杂的结构时,它会更有用。就像是:
在上面的示例中,
find */subdir -type f
仅在 first 中查找文件subdir
。但是find -path "*/subdir/*" -type f
会正常工作。只需使用适当的工具:
您可能想要(重新)运行:
如果您需要刷新定位的数据库(例如,如果您想查找最近添加的文件),但它应该每天通过 crontabs 构建(如果当时 pc 正在运行)
如果您需要最初的更新数据库,它可能看起来比特定的查找要慢,但最终它会更快,因为所有后续查询都很快完成。