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

标签 mysql linux zip

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

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

磁盘上的结构类似于:

/文件夹/sub1/file1

/文件夹/sub1/文件2

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

/文件夹/sub2/file2

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

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>

谢谢。

最佳答案

对命令进行了一些添加:

首先,您要使用 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 值 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 来解决这个问题。和-0findxargs分别,虽然 zip将会遇到困难,因此您需要添加另一个中间阶段(或使用 zip -r )。

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

相关文章:

java - Android 从文件资源管理器中过滤文件

linux - Flex : Fails to compile . 作为文件

PHP - MySQL - 从 XML 加载数据

mysql - PhpMyAdmin 仅使用意大利语打开结构时出错

MySQL 杀死休眠连接的函数

php - 如何在 Nginx 中安装 phpseclib

c - 访问内核模块中进程的预定指令

C# - 从 ZIP 中提取特定目录,保留文件夹结构

c# - 如何使用 SevenZipSharp 创建 SFX ZIP?

php - 如何用join来统计mysql?