2011-10-11 52 views
2

我有一个3,900个ID号码的列表,我需要在我们的FTP服务器上找到匹配的文件。可以找到一个文件作为stdin的参数吗?

查找一个文件非常简单,例如

find . -name "*IDNumber*" -exec ls '{}' ';' -print

但我怎么3900个的ID号码做到这一点?我创建了一个文件,其ID如下

028892663163 
028923481973 
... 

但是,如何将ID号列表作为参数传递?你能提供一些指针吗?

谢谢!

+0

文件系统中有多少个文件总数?可能会更快地列出所有内容,然后grep列表。 – bmargulies

+0

接近100万。 FTP服务器是一个批量文件管理器。 – Chris

回答

3

我会尽量减少你必须调用find次数:

find . -type f -print | grep -f id.file | xargs cp -t target_dir 
+0

@tripleee,你发表你的评论,而我正在撰写这个答案;) –

+0

辉煌的思想...... +1的'cp -t',不记得有一个选项。 – tripleee

1

您可以尝试通过一次运行具有多个id的find来优化它。

随着庆典(100的时间,您可以尝试使用更多):

c= p= 
while IFS= read -r; do 
    p+=" -name '*$REPLY*' -o " 
    ((++c)) 
    ((c % 100)) || { 
    eval find . ${p% -o } 
    p= 
    } 
done < id_list_all 

[[ $p ]] && 
    eval find . ${p% -o } 
0

想通了。

  • 把我的3900的ID号在文件outfile
  • 在命令行键入:

cat outfile | while read line do find . -name "$line" -exec cp '{}' /target_directory ';' -print done

曾任职真棒!

+1

猫的无用用途。正如另一个评论中暗示的那样,也可能更有效率地运行一个发现; '找。 -type f -print | fgrep -f outfile | xargs -i cp {}/target_directory' – tripleee

0

我看了你的问题错在第一时间...从参数找到其他的事情。你想要的是来自传递给查找的文件的参数。所以,这里的正确答案是xargs

xargs --max-args=1 -I X -d '\n' find . -name X -exec [...] < your_list 
相关问题