(回答)Bash SH中的find命令没有按预期工作

时间:2018-03-12 10:30:45

标签: linux bash debian

我有下面的脚本,它应该使用'find'将所有文件以extention(在我给出的列表中)复制到目标目录。但是,它不起作用。我试图改变'到'',''',“,”“,”“”从'找'开始,但仍然没有运气。 你能帮忙看看,看看我的编码出了什么问题,非常感谢。

#!/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

这是调试消息,这就是我在'find'行继续改变的原因。我认为输出看起来很有趣

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 个答案:

答案 0 :(得分:1)

#!/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

答案 1 :(得分:0)

您是否错过了find命令中的}

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

应该这样吗?

-name "*.${vExtnArr[vExtnArr_i]}"