【问题标题】:Bash: How would I remove the first part of a directory from a array for multiple files in a for loop?Bash:如何从 for 循环中的多个文件的数组中删除目录的第一部分?
【发布时间】:2021-05-07 05:17:49
【问题描述】:

我正在尝试为我编写一个管理点文件的脚本,这就是我所拥有的:

dots=(
    ~/.config/alacritty
    ~/.config/dunst
    ~/.config/flameshot
    ~/.config/i3
    ~/.config/i3status
    ~/.config/kitty
    ~/.config/nvim
    ~/.config/picom
    ~/.config/rofi
    ~/.config/gtk-3.0
    ~/.config/obs-studio
    ~/.config/sway
    ~/.config/waybar
    ~/.config/swappy
    ~/.config/mako
    ~/.config/swaylock
    ~/.config/Code/User/settings.json
    ~/.config/Code/User/keybindings.json
    ~/.config/fontconfig
    ~/.bash_logout
    ~/.bash_profile
    ~/.bashrc
    ~/.profile
    ~/.stignore
    ~/.gtkrc-2.0
)

for name in "${dots[@]}"; do
    if [ ! -e "$name" ]; then
        echo "$name does not exist."
        ln -sv "$HOME/Dotfiles/dots/${name#~/.config/}" "$name"
    else
        echo "$name exists."
    fi
done

这里的问题是它会从~/.config/sway 等目录中删除~/.config/ 部分,但不会删除~/.profile 等目录中的~/ 部分。

我的问题是,我将如何在删除 ~/.config/ 部分和 ~/ 部分的文件中删除它们?

编辑:在符号链接行中将 echo 替换为 ln -sv。我将其替换为echo,以便测试它是否有效。

【问题讨论】:

    标签: arrays bash shell scripting symlink


    【解决方案1】:

    我的问题是,我将如何在删除 ~/.config/ 部分和 ~/ 部分的文件中删除它们?

    就我个人而言,我会分两步完成,将中间结果存储在一个单独的变量中:

            local_part=${name#~/}
            ln -sv "$HOME/Dotfiles/dots/${local_part#.config/}" "$name"
    

    【讨论】:

    • 完美!我觉得你们这么容易想出解决方案真是太奇怪了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    相关资源
    最近更新 更多