【问题标题】:Bz2 every file in a dirBz2 目录中的每个文件
【发布时间】:2011-10-14 15:48:33
【问题描述】:

我正在运行 centos,我在一个文件夹中有大约 1,300 个文件,每个文件都需要单独进行 bzip 压缩。处理这个最简单的方法是什么?

【问题讨论】:

    标签: linux unix compression centos bzip2


    【解决方案1】:

    我已将下面的脚本写入bzip2 文件到另一个目录

    #!/bin/bash
    filedir=/home/vikrant_singh_rana/test/*
    
    for filename in $filedir; do
    name=$(basename "$filename" | sed -e 's/\.[^.]*$//')
    bzip2 -dc $filename > /home/vikrant_singh_rana/unzipfiles/$name
    done
    

    我的示例文件名是这样的

    2001_xyz_30Sep2020_1400-30Sep2020_1500.csv.bz2
    

    我无法获得任何直接命令,因此做了这个。这按预期工作正常。

    【讨论】:

      【解决方案2】:

      如果所有文件都在一个目录中,那么:

      bzip2 *
      

      够了。更稳健的方法是:

      find . -type f -exec bzip2 {} +
      

      这将压缩当前目录及其子目录中的每个文件,即使您有数万个文件也可以工作(如果目录中的文件太多,使用 * 会中断)。

      如果您的计算机有多个内核,那么您可以通过一次压缩多个文件来进一步改进这一点。例如,如果您想同时压缩 4 个文件,请使用:

      find . -type f -print0 | xargs -0 -n1 -P4 bzip2
      

      【讨论】:

      • 我不明白您在最后一个命令中指定使用 bzip2 的位置
      • {} +是什么意思?
      • 李的问题/评论在这里有一个很好的答案:https://unix.stackexchange.com/questions/12902/how-to-run-find-exec
      • 对于任何好奇将其应用于解压的人,只需传入该选项就足够了:find . -type f -print0 | xargs -0 -n1 -P4 bzip2 -d
      【解决方案3】:

      要在多核 Mac 上 bzip2,您可以发出以下命令(当您在要 bzip 的文件夹中时)

      find . -type f -print0 | xargs -0 -n1 -P14 /opt/local/bin/bzip2
      

      这将递归地压缩终端所在文件夹中的每个文件,同时使用 14 个 CPU 内核。

      您可以通过编辑来调整要使用的核心数

       -P14
      

      如果你不知道 bzip2 二进制文件在哪里,你可以发出以下命令来弄清楚

      which bzip2
      

      该命令的输出是你可以替换的

      /opt/local/bin/bzip2
      

      【讨论】:

        【解决方案4】:
        find PATH_TO_FOLDER -maxdepth 1 -type f -exec bzip2 -zk {} \;
        

        【讨论】:

          【解决方案5】:

          从目录内部:bzip2 *

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-09-11
            • 1970-01-01
            • 1970-01-01
            • 2022-07-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多