파일을 디렉토리에 심볼릭 링크할 때 디렉토리가 존재하지 않으면 생성됩니다.

파일을 디렉토리에 심볼릭 링크할 때 디렉토리가 존재하지 않으면 생성됩니다.

다음 명령과 같은 심볼릭 링크를 만들고 싶다고 가정해 보겠습니다.

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

하지만 위 명령이 작동하려면 디렉터리가 /home/user/cmus이미 존재하는지 확인해야 합니다. 그렇지 않으면 오류가 발생합니다. 이 문제를 해결할 수 있는 방법이 있나요 mkdir -p?

내 문제를 명확히 하기 위해 사용 사례를 적어보겠습니다. 적절한 위치에 도트 파일을 심볼릭 링크하는 쉘 스크립트를 만들고 싶습니다. 지금까지 나는 다음을 가지고 있습니다 :

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}/*" .

그러면 복사하는 대신 적절한 디렉토리 계층 구조와 심볼릭 링크 파일이 생성됩니다.

관련 정보