从find命令对目标文件执行多个命令

时间:2015-07-14 23:10:05

标签: linux bash

假设我有一堆*.tar.gz个文件位于文件夹层次结构中。找到这些文件的好方法是什么,然后在其上执行 多个 命令。

我知道如果我只需要在目标文件上执行一个命令,我可以使用这样的东西:

$ find . -name "*.tar.gz" -exec tar xvzf {} \; 

但是如果我需要在目标文件上执行多个命令呢?我必须在这里写一个bash脚本,还是有更简单的方法?

需要执行A.tar.gz文件的命令示例:

$ tar xvzf A.tar.gz   # assume it untars to folder logs
$ mv logs logs_A
$ rm A.tar.gz

2 个答案:

答案 0 :(得分:1)

编写shell脚本可能最简单。看看sh for loops。您可以use the output of a find command in an array,然后遍历该数组以对每个元素执行一组命令。

例如,

compatibility_level

答案 1 :(得分:1)

这对我有用(感谢Etan Reisner的建议)

    #!/bin/bash    # the target folder (to search for tar.gz files) is parsed from command line
    find $1 -name "*.tar.gz" -print0 | while IFS= read -r -d '' file; do    # this does the magic of getting each tar.gz file and assign to shell variable `file`
        echo $file                        # then we can do everything with the `file` variable
        tar xvzf $file
        # mv untar_folder $file.suffix    # untar_folder is the name of folder after untar
        rm $file
    done

根据建议,the array way如果文件名包含空格则不安全,并且在这种情况下似乎也无法正常工作。