bash - Unix 查找 : list of files from stdin

标签 bash unix find

我在 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/

相关文章:

bash - 如何连接文件并在一列中跟踪文件名?

unix - 如何在unix中移动或复制 'find'命令列出的文件?

linux - 将两个变量打印到一个文件中

linux - 如何将变量添加到sed中的匹配表达式?

r - 在 R : broken pipe error 中传递两个 bash 命令

linux - 如何避免并行命名管道的死锁?

windows - SSH Windows 到 UNIX

unix - 无法在 ubuntu 上执行二进制文件

linux - 删除列表中早于文件纪元日期的文件

linux - 使用由内部逻辑定义的查找参数从 bash 脚本调用查找