gzip 不同目录中的多个文件并复制到新目录

Dav*_*vid 4 linux compression gzip

我正在处理位于不同目录中的几个文件,我需要将这些文件压缩为单独的 .gz 文件。我还需要将压缩文件移动到单个目录,同时保留原始文件。

有没有办法使用 gzip 命令和一个包含我要压缩的文件的所有文件路径列表的文件来做到这一点?

抱歉,如果这有点啰嗦……我对 Linux 还很陌生,想不出更有效的措辞方式。

Den*_*nis 6

假设文件列表存储在一个名为filelist 的文件中(每行正好有一个文件路径),并且您想将压缩文件存储在zipdir 中,这个 bash 脚本将达到预期的结果:

#!/bin/bash

while IFS= read file; do
    gzip -c "$file" > "zipdir/$(basename "$file").gz"
done < filelist
Run Code Online (Sandbox Code Playgroud)

在 bash/dash 中,您还可以将上述内容转换为单行:

while IFS= read file; do gzip -c "$file" > "zipdir/$(basename "$file").gz"; done < filelist
Run Code Online (Sandbox Code Playgroud)

在其他 shell 中(例如,tcsh 或 zsh)

bash -c 'while IFS= read file; do gzip -c "$file" > "zipdir/$(basename "$file").gz"; done < filelist'
Run Code Online (Sandbox Code Playgroud)

会做的工作。

如果 bash 不存在,可以用破折号代替。

这个怎么运作

  • ... < filelistfilelist的内容重定向到....

  • while IFS= read file; do ... done遍历文件列表中的行,将当前处理的行的内容存储在变量文件中并执行....

    IFS=修改内部文件分隔符。这是正确处理多个前导和尾随空格所必需的。

  • gzip -c "$file" > "zipdir/$(basename "$file").gz"压缩当前处理的文件并将输出存储在目录zipdir 中具有相同名称和.gz扩展名的文件中。

    这里basename "$file"从文件的路径中提取裸文件名。