我有一个3,900个ID号码的列表,我需要在我们的FTP服务器上找到匹配的文件。可以找到一个文件作为stdin的参数吗?
查找一个文件非常简单,例如
find . -name "*IDNumber*" -exec ls '{}' ';' -print
但我怎么3900个的ID号码做到这一点?我创建了一个文件,其ID如下
028892663163
028923481973
...
但是,如何将ID号列表作为参数传递?你能提供一些指针吗?
谢谢!
我有一个3,900个ID号码的列表,我需要在我们的FTP服务器上找到匹配的文件。可以找到一个文件作为stdin的参数吗?
查找一个文件非常简单,例如
find . -name "*IDNumber*" -exec ls '{}' ';' -print
但我怎么3900个的ID号码做到这一点?我创建了一个文件,其ID如下
028892663163
028923481973
...
但是,如何将ID号列表作为参数传递?你能提供一些指针吗?
谢谢!
我会尽量减少你必须调用find
次数:
find . -type f -print | grep -f id.file | xargs cp -t target_dir
@tripleee,你发表你的评论,而我正在撰写这个答案;) –
辉煌的思想...... +1的'cp -t',不记得有一个选项。 – tripleee
您可以尝试通过一次运行具有多个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 }
想通了。
outfile
cat outfile | while read line do find . -name "$line" -exec cp '{}' /target_directory ';' -print done
曾任职真棒!
猫的无用用途。正如另一个评论中暗示的那样,也可能更有效率地运行一个发现; '找。 -type f -print | fgrep -f outfile | xargs -i cp {}/target_directory' – tripleee
我看了你的问题错在第一时间...从参数找到其他的事情。你想要的是来自传递给查找的文件的参数。所以,这里的正确答案是xargs:
xargs --max-args=1 -I X -d '\n' find . -name X -exec [...] < your_list
文件系统中有多少个文件总数?可能会更快地列出所有内容,然后grep列表。 – bmargulies
接近100万。 FTP服务器是一个批量文件管理器。 – Chris