gpt4 book ai didi

mysql - linux命令行根据mysql结果集压缩文件

转载 作者:太空狗 更新时间:2023-10-29 12:18:17 30 4
gpt4 key购买 nike

我有一个表,其中存储了一些文件名。

我想在特定文件夹下找到所有具有该名称的文件并将它们全部压缩。

磁盘上的结构类似于这样:

/文件夹/子1/文件1

/文件夹/子1/文件2

/folder/sub2/file1 <- 与 sub1 下的名称相同

/文件夹/子2/文件2

所以我正在寻找类似的东西:

mysql -e "select file from table" | find /folder -type f -name <the value of file from mysql result set> | zip <all files found by all find commands>

谢谢。

最佳答案

对您的命令的一些补充:

首先,你想在batch模式下使用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,每个都执行一个 bool 值 (最初为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

请记住,这假设您的文件名中没有空格。如果这样做,会增加一些复杂性:您可以通过在 findxargs,虽然 zip 会比较难,所以你需要添加另一个中间阶段(或使用 zip -r)。

关于mysql - linux命令行根据mysql结果集压缩文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18814845/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com