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

詹姆斯·伊辛

在下面的功能中,您将看到有关解决该问题的几种尝试的注释;每次尝试都有一条注释,指出出了什么问题。在我的尝试之间,这里的另一个问题似乎是想解决问题的某些要素。同样,我添加了一条注释,指出应解决的问题。这时我的大脑很糊涂。我忽略的愚蠢简单的事情是什么?

function func_removeDestinationOrphans() { 
    readarray -d '' A_Destination_orphans < <( find "${directory_PMPRoot_destination}" -type f -print0 ) 
    for (( i = 0 ; i < ${#A_Destination_orphans[@]} ; i++ )) ; do 
        printf '%s\n' "→    ${A_Destination_orphans[${i}]}" # path to each track 
    done 
    printf '%b\n' "" 
    # https://stackoverflow.com/questions/2312762/compare-difference-of-two-arrays-in-bash 
    # echo ${Array1[@]} ${Array2[@]} | tr ' ' '\n' | sort | uniq -u ## original 
    # Array3=(`echo ${Array1[@]} ${Array2[@]} | tr ' ' '\n' | sort | uniq -u `) ## store in array 
    # A_Destination_orphans_diff=(`echo "${A_Destination_dubUnders[@]}" "${A_Destination_orphans[@]}" | tr ' ' '\n' | sort | uniq -u `) # drops file path after space 
    # printf "%s\0" "${Array1[@]}" "${Array2[@]}" | sort -z | uniq -zu ## newlines and white spaces 
    # A_Destination_orphans_diff=($( printf "%s\0" "${A_Destination_dubUnders[@]}" "${A_Destination_orphans[@]}" | sort -z | uniq -zu )) # throws warning and breaks at space but not newline 
    # printf '%s\n' "${Array1[@]}" "${Array2[@]}" | sort | uniq -u ## manage spaces 
    # A_Destination_orphans_diff=($( printf '%s\n' "${A_Destination_dubUnders[@]}" "${A_Destination_orphans[@]}" | sort | uniq -u )) # breaks at space and newline 
    # A_Destination_orphans_diff="($( printf '%s\n' "${A_Destination_dubUnders[@]}" "${A_Destination_orphans[@]}" | sort | uniq -u ))" # creates string surrounded by () 
    # A_Destination_orphans_diff=("$( printf '%s\n' "${A_Destination_dubUnders[@]}" "${A_Destination_orphans[@]}" | sort | uniq -u )") # creates string 
    # A_Destination_orphans_diff=($( printf '%s\n' ${A_Destination_dubUnders[@]} ${A_Destination_orphans[@]} | sort | uniq -u )) # drops file path after space 
    for (( i = 0 ; i < ${#A_Destination_orphans_diff[@]} ; i++ )) ; do 
        printf '%s\n' "→    ${A_Destination_orphans_diff[${i}]}" # path to each track 
    done 
    printf '%b\n' "" 
    for (( i = 0 ; i < ${#A_Destination_orphans_diff[@]} ; i++ )) ; do 
        echo # rm "${A_Destination_orphans_diff[i]}" 
    done 
    func_EnterToContinue 
} 
詹姆斯·伊辛

这是经过修改的工作版本,这要感谢前两位受访者的建议(谢谢!)。

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找到

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python:根据第三个数组对两个数组进行排序

将两个数组 php 与第三个数组进行比较

将值从两个数组转换为新的第三个数组

在前两个数组的基础上创建第三个数组

如何添加两个数组以生成第三个数组?

检索和更新函数,用于在第三个数组中求和两个数组

如何添加两个不等数组的每个元素并将其存储在第三个数组中?

元素的总和到第三个数组

我想比较两个numpy数组并创建第三个数组

将两个不同数组的元素合并到第三个数组

如何在第三个数组中对两个数组的值进行分组?

Java映射两个数组中的数据并将其插入第三个数组

比较两个数组时从第三个数组打印正确的项目的问题

Ruby:将两个数组的各个值配对为第三个数组

比较两个数组,并用第三个数组中的值替换重复项

从两个数组中获取正数,然后从中创建第三个

创建两个数组,然后在用作两个微调器uipickerview的数据的第三个数组中使用它们

在与前两个具有相同组合长度的第三个数组内打印两个数组

显示每个数组的第一个和第三个值

PHP将2个数组合并为第三个数组

使用2个数组在numpy中填充第三个数组

numpy:将第三个维度上的两个数组连接起来

有效地从第三个数组中的两个数组中获取每对元素的最小值

使用第三个数组作为枢轴对三个数组进行排序

php 创建一个带有额外值的第三个数组,其中的键与两个现有数组相匹配

有没有办法通过只保持与第三个数组的最大距离来合并两个 numpy 数组?

基于第三个数组对多维数组进行排序

Map和Filter在两个数组元素上起作用,但在第三个看起来相同的数组元素上失败

将 2 个数组的排序合并到 C 中的第三个数组中