且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

diff两个数组,每个数组包含文件路径到第三个数组(用于删除)

更新时间:2023-01-31 12:00:10

这里是经过修改的工作版本,这要归功于前两个受访者的建议输入(谢谢!).

Here is the working version with modifications thanks to suggested input from the first two respondents (thanks!).

function func_removeDestinationOrphans() { 
    printf '%s\n' " →   Purge playlist orphans:  " "" 
    printf '%b\n' "First we will remove any files not present in your proposed playlist.  " 
    func_EnterToContinue 
    bash_version="$( bash --version | head -n1 | cut -d " " -f4 | cut -d "(" -f1 )" 
    if printf '%s\n' "4.4.0" "${bash_version}" | sort -V -C ; then 
        readarray -d '' A_Destination_orphans < <( find "${directory_PMPRoot_destination}" -type f -print0 ) # readarray or mapfile -d fails before bash 4.4.0 
        readarray -t -d '' A_Destination_orphans_diff < <( 
            printf "%s\0" "${A_Destination_dubUnders[@]}" "${A_Destination_orphans[@]}" | 
            sort -z | 
            uniq -zu 
        ) 
    else 
        while IFS=  read -r -d $'\0'; do 
            A_Destination_orphans+=( "$REPLY" ) 
        done < <( find "${directory_PMPRoot_destination}" -type f -print0 ) 
        IFS=$'\37' read -r -d '' -a A_Destination_orphans_diff < <( 
        printf "%s\0" "${A_Destination_dubUnders[@]}" "${A_Destination_dubUnders[@]}" "${A_Destination_orphans[@]}" | 
            sort -z | 
            uniq -zu | 
            xargs -0 printf '%s\37' 
        ) 
    fi 
    if [[ ! "${A_Destination_orphans_diff[*]}" = '' ]] ; then 
        for (( i = 0 ; i < ${#A_Destination_orphans_diff[@]} ; i++ )) ; do 
            rm "${A_Destination_orphans_diff[i]}" 
        done 
    fi 
} 

如果您想查看整个Personal Music Player同步脚本,可以通过我的 GitHub .

If you would like to see the entire Personal Music Player sync script, you can find that via my GitHub.