我在 Linux 和 bash(或 Cygwin 和 bash)中工作。
我有一个巨大的——巨大——目录结构,我必须大海捞针。
具体来说,我要查找这些文件(20 个左右):
foo.c
bar.h
...
quux.txt
我知道它们在 .
下某处的子目录中。
我知道我可以找到其中任何一个
找到。 -name foo.c -print
.此命令需要几分钟才能执行。
如何打印这些文件的名称及其完整的目录名称?我不想执行 20 个单独的 find
——这会花费太长时间。
我可以给 find
标准输入中的文件列表吗?来自文件?是否有其他命令可以执行我想要的操作?
我是否必须首先使用循环或其他方式为 find
和 -o
组装命令行?
最佳答案
如果你的目录结构很大但又不经常变化,运行起来还是不错的
cd /to/root/of/the/files
find . -type f -print > ../LIST_OF_FILES.txt #and sometimes handy the next one too
find . -type d -print > ../LIST_OF_DIRS.txt
在它之后,您可以真正快速地找到任何东西(使用 grep、sed 等),并且仅当树发生变化时才更新文件列表。 (如果您没有 locate
,这是一个简化的替换)
所以,
grep '/foo.c$' LIST_OF_FILES.txt #list all foo.c in the tree..
当想查找文件列表时,您可以尝试以下操作:
fgrep -f wanted_file_list.txt < LIST_OF_FILES.txt
或者直接用查找命令
find . type f -print | fgrep -f wanted_file_list.txt
fgrep 的 -f
意味着 - 从文件中读取模式,因此您可以轻松地为多个模式输入 grep...
关于bash - Unix 查找 : list of files from stdin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6185994/