我有下面的脚本,它应该使用'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[@]}"'
答案 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]}"