for循环工作在多个目录深度

时间:2016-03-30 17:33:20

标签: bash for-loop

我在bash中有以下for循环:

for file in "$1"/*PM.mov ; do 
    ffmpeg -i "$file" -an -f framemd5 "${file}.framemd5.txt"
done

我想调整它,以便它可以在给定目录中的任何* PM.mov文件上运行,而不管该文件的目录深度如何。现在,循环只运行在目录的顶层。我该如何改变?

2 个答案:

答案 0 :(得分:1)

两种可能性:

  • 使用globstar(以及我们nullglob时):

    shopt -s globstar nullglob
    for file in "$1"/**/*PM.mov ; do 
        ffmpeg -i "$file" -an -f framemd5 "${file}.framemd5.txt"
    done
    
  • 正确使用find (但前一个更好,因为它只是对您的代码进行了一些小改动):

    find "$1" -type f -name "*PM.mov" -exec sh -c 'file=$1; ffmpeg -i "$file" -an -f framemd5 "$file.framemd5.txt"' sh {} \;
    

答案 1 :(得分:0)

使用find cmd

@media screen and (max-width: 1020px) {
    .helpful .readers,
    .helpful .thumb {
        display: block;
        text-align: center;
    }

    .helpful .thumb {
        float: none;
    }
}