您的命令中添加了一些内容:
首先,你想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
请记住,这假设您的文件名中没有空格。如果这样做,那会增加一些复杂性:您可以分别使用-print0
and -0
infind
和来解决这个问题xargs
,尽管zip
这样做会更困难,因此您需要添加另一个中间阶段(或使用zip -r
)。