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

(回答)Bash SH中的find命令未按预期工作[已关闭]

  •  -1
  • user3724711  · 技术社区  · 8 年前

    我有下面这样的脚本,它应该使用“find”将所有以扩展名结尾的文件(在我给出的列表中)复制到目标目录。然而,它不起作用。我尝试将“改为”、“查找”、“查找”,但仍然没有成功。 请您帮忙看看,看看我的编码出了什么问题,非常感谢。

    #!/bin/bash
    
    vDirIn=/IN/
    vDirOut=/OUT/
    vAction="Copy"
    
    vExtn="avi,mkv,mp4"
    
    vExtnArr=($(echo "$vExtn" | tr ',' '\n'))
    
    for vExtnArr_i in "${!vExtnArr[@]}"
    do
        echo "$vExtnArr_i: ${vExtnArr[vExtnArr_i]}"
    
        if [ "$vAction" == "Copy" ]
        then
           find "$vDirIn" -name '*.${vExtnArr[vExtnArr_i]' -exec cp -rf {} $vDirOut \;
        else
           find "$vDirIn" -name '*.${vExtnArr[vExtnArr_i]' -exec mv -f {} $vDirOut \;
        fi
    
    done
    

    这是调试消息,这就是为什么我在“查找”行不断更改的原因。我认为输出看起来很有趣

    bash -x ./CopyMediaFiles.sh
    +++ readlink -f ./CopyMediaFiles.sh
    ++ dirname '/CopyMediaFiles.sh'
    + vPGMDir='/'
    + date
    + vDirIn=/IN/
    + vDirOut=/OUT/
    + vAction=Copy
    + vExtn=avi,mkv,mp4
    + vExtnArr=($(echo "$vExtn" | tr ',' '\n'))
    ++ tr , '\n'
    ++ echo avi,mkv,mp4
    + for vExtnArr_i in '"${!vExtnArr[@]}"'
    + echo '0: avi'
    0: avi
    + '[' Copy == Copy ']'
    + find /IN/ -name '*.${vExtnArr[vExtnArr_i]' -exec cp -rf '{}' /OUT/ ';'
    + for vExtnArr_i in '"${!vExtnArr[@]}"'
    + echo '1: mkv'
    1: mkv
    + '[' Copy == Copy ']'
    + find /IN/ -name '*.${vExtnArr[vExtnArr_i]' -exec cp -rf '{}' /OUT/ ';'
    + for vExtnArr_i in '"${!vExtnArr[@]}"'
    + echo '2: mp4'
    2: mp4
    + '[' Copy == Copy ']'
    + find /IN/ -name '*.${vExtnArr[vExtnArr_i]' -exec cp -rf '{}' /OUT/ ';'
    + for vExtnArr_i in '"${!vExtnArr[@]}"'
    
    2 回复  |  直到 8 年前
        1
  •  1
  •   user3724711    8 年前
    #!/bin/bash
    
    vDirIn=/IN/
    vDirOut=/OUT/
    vAction="Copy"
    
    vExtn="avi,mkv,mp4"
    
    vExtnArr=($(echo "$vExtn" | tr ',' '\n'))
    
    for vExtnArr_i in "${!vExtnArr[@]}"
    do
    echo "$vExtnArr_i: ${vExtnArr[vExtnArr_i]}"
    
    if [ "$vAction" == "Copy" ]
    then
       find "$vDirIn" -name "*.${vExtnArr[vExtnArr_i]}" -exec cp -rf {} $vDirOut \;
    else
       find "$vDirIn" -name "*.${vExtnArr[vExtnArr_i]}" -exec mv -f {} $vDirOut \;
        fi
    
    done
    
        2
  •  0
  •   Sam    8 年前

    您是否缺少 } 从你的find命令?

    -name '*.${vExtnArr[vExtnArr_i]' 
    

    应该是这个吗?

    -name "*.${vExtnArr[vExtnArr_i]}"
    
    推荐文章