次のコマンドのようなシンボリックリンクを作成したいとします。
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}/*" .
これにより、コピーするのではなく、適切なディレクトリ階層とシンボリックリンクファイルが作成されます。