您的命令中添加了一些内容:
首先,你想mysql在批处理模式下使用,所以你这样做:
mysql -Be "select file from table"
它为您提供了一个没有边框的单列表,因此您可以通过管道将其tail从第二行开始删除标题:
tail -n +2
然后你通过管道将它发送到xargs,但在你这样做之前,用它稍微破解一下concat(你会在几秒钟内看到为什么):
mysql -Be "select concat(' -o -name ', file) from table"
现在您将其通过管道传输到xargs:
xargs find /folder -false
这会进行“错误”测试(即无操作),但它会附加一大堆东西,例如-o -name somename.file,每个都执行布尔值or(false最初是,后来是所有其他文件名)并最终返回匹配。
...您最终zip使用另一个 xargs 管道传输到:
xargs zip files.zip
同样,这会将文件名作为zip.
这是总行:
mysql -Be "select concat(' -o -name ', file) from table" | tail -n +2 | xargs find /folder -false | xargs zip files.zip
请记住,这假设您的文件名中没有空格。如果这样做,那会增加一些复杂性:您可以分别使用-print0and -0infind和来解决这个问题xargs,尽管zip这样做会更困难,因此您需要添加另一个中间阶段(或使用zip -r)。