フォルダ内のファイルをシンボリックリンクする方法

フォルダ内のファイルをシンボリックリンクする方法

フォルダ内のファイルを繰り返し、シンボリックリンクを作成します。

現在のスクリプトはフォルダ内のファイルを繰り返し、他のフォルダへのシンボリックリンクを作成しようとしています。

#!/bin/bash
############################
# .make.sh
# This script creates symlinks from the home directory to any desired dotfiles in ~/dotfiles
############################

########## Variables

dir=~/dotfiles                    # dotfiles directory
config_files=$dir/*

# move any existing home files in homedir to dotfiles_old directory, then create symlinks
for config_file in $config_files; do
  ln -s $dir/$config_file ~/.$config_file
done

~/dotfiles に複数のファイルがある場合、たとえばファイルを含むフォルダがあります。フォルダが作成され、シンボリックリンクされているかどうかを確認するにはどうすればよいですか?

たとえば、私の~/dotfilesIには次のものがあります。

~/dotfiles/.config/fish/config.fishそして~/dotfiles/.config/fish/conf.d/config.fish

私はシンボリックリンクで終わらなければなりません

~/.config/fish/config.fishそして~/.config/fish/conf.d/config.fish

どうすればいいですか?

答え1

たぶんcp代わりに使用することもできます。lnman 1 cp:

-R
再帰的にディレクトリをコピーする

-s
コピーする代わりにシンボリックリンクを作成する

メモ:

  • -RPOSIXはこれを要求しますが、-sそうではありません(サポートすることcpもサポートしないかもしれません)。
  • このようにファイルを「コピー」しても-R問題はありません。
  • cp -Rs …(ディレクトリへのシンボリックリンクではなく)シンボリックリンクを使用してディレクトリ構造をファイルにコピーします。
  • 私のKubuntuでは、相対シンボリックリンクを作成することがcp現在のディレクトリに制限されているので-R
  • 研究-pオプションcp。あなたがそれを使用したいと仮定します。

スクリプトに関するいくつかの懸念:

  • このコメント変数を引用するのは合理的です。
  • *名前がドット()で始まる.ファイルまたはディレクトリは返されません。

関連情報