我有3,900个ID号列表,我需要在FTP服务器上找到匹配的文件。
查找一个文件非常简单,例如。
find . -name "*IDNumber*" -exec ls '{}' ';' -print
但如何为3,900个ID号码执行此操作?我创建了一个包含ID的文件
028892663163
028923481973
...
但如何将ID号列表作为参数传递?你能提供一些指示吗?
谢谢!
答案 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)
想出来。
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