I have s script like below, which should use ‘find’ to copy all files end with extention (in the list I gave) to the destination directory. however, it’s not working. I tried to change ‘ to ”, ”’, “,””,””” in line start with ‘find’ but still no luck. could you please help to take a look, see what went wrong for my coding, thanks a lot.
#!/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
here is the debug message, this is why I keep changing at the ‘find’ line. the output looks funny as I think
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[@]}"'
Advertisement
Answer
Are you missing a }
from your find command?
-name '*.${vExtnArr[vExtnArr_i]'
Should it be this?
-name "*.${vExtnArr[vExtnArr_i]}"