可以从stdin中找到一个文件作为参数吗?

时间:2011-10-11 18:53:11

标签: bash

我有3,900个ID号列表,我需要在FTP服务器上找到匹配的文件。

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

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

但如何为3,900个ID号码执行此操作?我创建了一个包含ID的文件

028892663163
028923481973
...

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

谢谢!

4 个答案:

答案 0 :(得分:3)

我会尝试减少您调用find的次数:

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

答案 1 :(得分:1)

您可以尝试通过一次运行包含多个ID的查找来优化它。

使用 bash (一次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 }

答案 2 :(得分:0)

想出来。

  • 将我所有的3,900个ID号码放在一个文件outfile
  • 输入命令行:

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

工作得很棒!

答案 3 :(得分:0)

我第一次读错了你的问题......从发现到其他事情的论点。你想要的是传递给find的文件中的参数。所以,这是xargs的正确答案:

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