结合grep和find从查询文件中搜索文件名

时间:2014-11-24 17:32:00

标签: shell grep find

我发现了许多类似的例子,但找不到一个例子来做以下事情。我有一个文件名(file1,file2,file3等)的查询文件,并希望在目录树中找到这些文件;这些文件可能在目录树中出现不止一次,所以我正在寻找完整的路径。此选项效果很好:

find path/to/files/*/*  -type f | grep -E "file1|file2|file3|fileN"  

我想要的是将grep文件传递给文件名,例如使用-f选项,但不成功。非常感谢您的见解。

这是查询文件的样子: 所以该文件包含一列由'\ n'分隔的文件名,这是它的样子:

103128_seqs.fna
7010_seqs.fna
7049_seqs.fna
7059_seqs.fna
7077A_seqs.fna
7079_seqs.fna

1 个答案:

答案 0 :(得分:1)

grep -f FILE获取与FILE相匹配的模式... 每行一个*

cat files_to_find.txt
n100079_seqs.fna
103128_seqs.fna
7010_seqs.fna
7049_seqs.fna
7059_seqs.fna
7077A_seqs.fna
7079_seqs.fna

删除任何空格(或手动执行):

perl -i -nle 'tr/ //d; print if length' files_to_find.txt

创建一些要测试的文件:

touch `cat files_to_find.txt`

使用它:

find ~/* -type f | grep -f files_to_find.txt

输出:

/home/user/tmp/7010_seqs.fna
/home/user/tmp/103128_seqs.fna
/home/user/tmp/7049_seqs.fna
/home/user/tmp/7059_seqs.fna
/home/user/tmp/7077A_seqs.fna
/home/user/tmp/7079_seqs.fna
/home/user/tmp/n100079_seqs.fna
这是你想要的吗?