给定O(n lg n)中的协调文件列表,如何删除$ HOME中的特定符号链接?

我已经为我的点文件创建了一个管理器,该管理器在dot_files /目录中的每个点文件和$ HOME之间创建了符号链接。

我正在尝试编写一个脚本,删除所有这些特定的符号链接,而不删除其他任何符号。

这是我的O(n ^ 2)解决方案,可以很好地完成工作。

delete_sym_links () {
    # Include dot (.) files while looping
    shopt -s dotglob

    for DOT_FILE in ~/dot_files/*;
    do
        if [ ! -d "$DOT_FILE" ];
        then
            for FILE in ~/*;
            do
                if [ -h "$FILE" ] && [ $(basename $DOT_FILE) = $(basename $FILE) ];
                then
                    rm "$FILE"
                    echo deleted "$FILE"
                fi
            done
        fi
    done
}

我正在尝试将运行时降低到O(n lg n)。打击确实使我震惊。

就像是...

delete_sym_links () {
    SYM_LINKS=($(find $HOME -maxdepth 1 -type l -ls | sort -n))
    NUM_SYM_LINKS=$(find $HOME -maxdepth 1 -type l -ls | wc -l)
    DOT_FILES=$(find $HOME/dot_files/ -maxdepth 1 -name ".*" -type f | sort -n)
    NUM_DOT_FILES=$(find $HOME/dot_files/ -maxdepth 1 -name ".*" -type f | wc -l)

    i=0
    j=0

    while (("$i" < "$NUM_SYM_LINKS")) && (("$j" < "$NUM_DOT_FILES"));
    do
        if [ $(basename ${SYM_LINKS[$i]}) = $(basename ${DOT_FILES[$j]}) ];
        then
            echo removing sym link ${SYM_LINKS[$i]}
            rm ${SYM_LINKS[$i]}
            ((j++))
        else
            ((i++))
        fi
    done

    echo "All dot_files sym links removed"
}

j

试试这个Shellcheck -clean,O(n),代码:

function delete_symlinks
{
    local df_path df_name home_df_path

    for df_path in ~/dot_files/.* ; do
        [[ -d $df_path ]] && continue
        df_name=${df_path##*/}
        home_df_path=~/$df_name
        if [[ -L $home_df_path ]] ; then
            rm -- "$home_df_path"
            printf 'deleted %s\n' "$home_df_path"
        fi
    done

    return 0
}

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

复杂度理论中的O(lg(n))* O(lg(n))

证明lg(n!)= O(n!)

大于lg N的最小整数

Visual Basic 中的 lg 函数

合并排序lg(n)+1中递归树的高度如何

如何从给定文件C中删除“#”符号

如何从链接列表中删除第n个元素?

如何从列表元素中删除\ n?

如何从列表中的条目中删除“\n”?

如何从列表结果中删除 /n?

如何比o(n)更快地从Redis列表中删除

从C#中的数据结构中查找带有一些epsilon的浮点,并进行搜索并插入O(lg n)时间

根据O(n)中的唯一给定索引获取排列

从列表中删除 \n

如何在XSLT中引用TEI xml文档的lg元素中的n属性来创建LaTeX输出(用于使用reledmac制作PDF)

为什么我的合并排序不像O(n * lg n))?

Python:如何从列表中删除/删除第n个元素?

引导程序4:列(td)中的d-lg-flex

CSS Flexbox系统中xs,md,lg的含义是什么?

在Light Gallery中禁用“ .lg-img-wrap”类的点击

Hierarachy Viewer在Google LG nexus 4中无法使用吗?

如何从文件 [shell] 中某些特定行的末尾删除 \n?

如果n = 100的O(lg(n))算法运行1秒,那么如何计算n = 1000需要多长时间?

如何为给定范围 n 的列表中的每个元素编号?

在Twitter Bootstrap 3中使用col-lg-push和col-lg-pull进行列顺序操作

是否可以查询O(lg N)范围内不同整数的数量?

在O(lg n)领带复杂度的排序数组中找到多数元素

如何从 Python 中的列表中删除 \n\t\r?

fscanf(文件指针,“%d \ n%lg \ n”,sig_length,sample_rate);怎么解释呢?