WindowsとAndroidをほぼ10年間使用した後、最近はMacBook(MacOS Ventura)とiPhone 11を使ってAppleエコシステムに移行しました。私のコンピュータに複数のGitリポジトリを維持する必要がありましたが、いくつかの調査の後、iCloud DriveではなくMacBookにローカルに保持することにしました。
問題は、Gitリポジトリの一部ではなく、プロジェクトの一部であるスライド、テキストファイル、ドキュメント、スプレッドシート、画像など、これらのプロジェクトに関連するドキュメントをiCloud Driveで同期したいということです。私の最初の考えは、それぞれに.nosyncを使用することでしたが、もう1つの問題は、iCloudがナビゲートするのが非常に難しいということです。したがって、理想的には、「Computing」フォルダ全体が「~/Computing」にある必要があります。
2番目の考えは、同期したいものをiCloudに保存してから、〜/ Computingフォルダにエイリアスを割り当てることでした。これが私が今やっている作業です。しかし、私は一度だけ設定することができ、「メンテナンス」を必要としないソリューションを望んでいます。
他のストレージをiCloudに同期するときにGitストレージが同期されないようにするにはどうすればよいですか?
答え1
これをより深く考えた後、私はすべての最下位ディレクトリに自動的にシンボリックリンクを作成するシェルスクリプトを書いて、ローカルディレクトリcdに同じ構造を維持しながらgitリポジトリを追加できることに気づきました。
#!/bin/bash
icloud_dev_dir="$HOME/Library/Mobile Documents/com~apple~CloudDocs/dev"
personal_dev_dir="$HOME/Computing"
# Function to create aliases for files within a directory
create_aliases_for_files() {
local source_dir=$1
local target_dir=$2
find "$source_dir" -maxdepth 1 -type f -print0 | while IFS= read -r -d '' file; do
local file_name=$(basename "$file")
ln -s "$file" "$target_dir/$file_name"
sleep 1
echo "Created alias: $file -> $target_dir/$file_name"
done
}
# Function to create aliases for lowest-level directories
create_aliases_for_directories() {
local path=$1
local base_dir=$2
local relative_path=${path#"$icloud_dev_dir"}
local target_dir="$base_dir$relative_path"
if [[ "$path" != "$icloud_dev_dir" ]]; then
if [[ "$path" -ef "$target_dir" ]]; then
echo "Skipping self-referential symlink: $path"
elif [[ -z "$(find "$path" -mindepth 1 -type d)" ]]; then
ln -s "$path" "$target_dir"
sleep 1
echo "Created alias: $path -> $target_dir"
else
mkdir -p "$target_dir"
create_aliases_for_files "$path" "$target_dir"
sleep 1
echo "Created directory: $target_dir"
fi
fi
}
# Create aliases for lowest-level directories
find "$icloud_dev_dir" -type d -print0 | while IFS= read -r -d '' directory; do
create_aliases_for_directories "$directory" "$personal_dev_dir"
done
これで、ファイルとフォルダがiCloud Driveに追加されていることを確認し、スクリプトを再実行します。Gitリポジトリで使用する必要がある場合にのみ。