将文件符号链接到该目录时,如果该目录不存在,则创建该目录

将文件符号链接到该目录时,如果该目录不存在,则创建该目录

假设我想像以下命令一样进行符号链接:

ln -s /home/user/dots/cmus/cmus.theme /home/user/cmus/cmus.theme

但为了使上述命令起作用,我需要确保该目录/home/user/cmus已经存在。否则会出现错误。有没有办法解决这个问题mkdir -p

为了弄清楚我的问题,我将放下我的用例。我想创建一个 shell 脚本,它将在适当的位置对我的点文件进行符号链接。到目前为止,我有以下几点:

DIR=$HOME/projects/dotFiles

DOTFILES=(
    "bin"
    ".bashrc"
    ".bash_profile"
    ".gitconfig"
    ".profile"
    ".tmux.conf"
    ".xinitrc"
    ".config/cmus/cmus.theme"
    ".config/compton.conf"
    ".config/dunst"
    ".config/feh"
    ".config/mpv"
    ".config/nvim"
    ".config/ranger"
    ".local/share/fonts"
)

for dotfile in "${DOTFILES[@]}";do
    rm -rf "${HOME}/${dotfile}"
    ln -sf "${DIR}/${dotfile}" "${HOME}/${dotfile}"
done

但是,我不知道如何在不事先明确创建目录的情况下解决我指定的问题。

答案1

如果您使用的是 GNU cp,则可以使用它的-s选择:

cd "${HOME}"
cp -rs "${DIR}/.*" "${DIR}/*" .

这将创建适当的目录层次结构和符号链接文件,而不是复制它们。

相关内容