代码之家  ›  专栏  ›  技术社区  ›  gator

是否将子文件夹中的所有.bz2提取到其他文件夹?

  •  0
  • gator  · 技术社区  · 7 年前

    我的文件夹层次结构如下:

    folder
    -- subfolder1
    ---- file1.bz2
    ---- file2.bz2
    ---- file3.bz2
    ---- ...
    -- subfolder2
    ---- file4.bz2
    ---- ...
    -- subfolder3
    ---- file5.bz2
    ---- ...
    -- ...
    

    每个里面 .bz2 是一个 .ppm 文件。我想把所有的 BZ2 在内部 folder 到另一个文件夹,比如 newFolder .

    // assume file.ppm is extracted from file.bz2
    newFolder
    -- file1.ppm
    -- file2.ppm
    -- file3.ppm
    -- file4.ppm
    -- file5.ppm
    -- ...
    

    或者只是 1.ppm , 2.ppm 等等。怎么能一下子就在巴什身上完成呢?

    2 回复  |  直到 7 年前
        1
  •  1
  •   David C. Rankin    7 年前

    你可以用 find -exec ,但您需要一个助手脚本来处理移除 .bz2 从原始文件名扩展并添加 .ppm 扩展。

    您将改为 newfolder 目录,然后您需要的find命令的一般形式是:

    $ find /path/to/folder -type f -name "*bz2" -exec /path/to/helper.sh '{}' \;
    

    帮助程序脚本将解压bzip文件,保留原始文件,并将解压的输出重定向到当前目录中的新文件。(您还应该对传递给 helper.sh 在盲目尝试减压之前)。帮助程序脚本可以是一个简单的:

    #!/bin/bash
    
    [ -z "$1" ] && return 1   ## validate argument past
    [ -r "$1" ] || return 1   ## validate argument is readable file
    
    fn="${1##*/}"             ## remove path components
    
    ## decompress to stdout, preserving original, redirect to new name
    bzip2 -cdk "$1" > "${fn%.bz2}.ppm"
    

    (确保 助手.sh 可执行文件,例如 chmod +x /path/to/helper.sh )

    以包含以下内容的文件夹开头的简短示例:

    $ l1 ../folder
    file1.bz2
    file2.bz2
    file3.bz2
    file4.bz2
    

    现在的目录 新建文件夹 空的 助手.sh 在父目录中,您将:

    $ find ../folder -type f -name "*bz2" -exec ../helper.sh '{}' \;
    

    现在是当前目录 新建文件夹 包含原始文件的解压缩内容 BZ2 文件夹:

    $ l1
    file1.ppm
    file2.ppm
    file3.ppm
    file4.ppm
    

    与原件 BZ2 保留在原始目录中的文件 folder .

        2
  •  1
  •   Mark Setchell    7 年前

    mkdir -p results
    find . -name \*.bz2 -print0 | parallel -0 --dry-run 'bzip2 -cdk {} > results/{#}.ppm' 
    

    bzip2 -cdk ./folder/folder3/x.bz2 > results/3.ppm
    bzip2 -cdk ./folder/folder2/x.bz2 > results/2.ppm
    bzip2 -cdk ./folder/folder1/x.bz2 > results/1.ppm
    bzip2 -cdk ./folder/folder4/x.bz2 > results/4.ppm
    

    --dry-run

    • {}
    • {#}

    • {.}
    • {/}
    • {//}

    parallel -k ...

    推荐文章