Skip to content

Instantly share code, notes, and snippets.

@hjeffrey
Created October 22, 2019 04:05
Show Gist options
  • Save hjeffrey/a86d1b9b4156ccb12be445710300b21a to your computer and use it in GitHub Desktop.
Save hjeffrey/a86d1b9b4156ccb12be445710300b21a to your computer and use it in GitHub Desktop.
Ramdisk For XCode
# install to $HOME/.ramdisk
# initramdisk.sh - make a ramdisk, the default size is 6GB.
# syncramdisk.sh - sync files of ramdisk to disk, when logout.
# makeRamDiskWhenRestart.sh - make Hook, LoginHook and LogoutHook. LoginHook for initramdisk.sh, LogoutHook for syncramdisk.sh.
# moveXcodeCacheToRamDisk.sh - run shell above, then move xcode cache folder to ramdisk.
# ---------------- initramdisk.sh ------------------
#!/usr/bin/env sh
# 设置内存盘的名称
DISK_NAME=RamDisk
MOUNT_PATH=/Volumes/$DISK_NAME
# 设置备份文件的保存路径
WORK_PATH=$HOME/.ramdisk
BAK_PATH=$WORK_PATH/$DISK_NAME.tar.gz
# 设置RamDisk日志文件
LOG=$WORK_PATH/RamDisk.log.txt
# 设置分配给内存盘的空间大小(MB) 这是上限值,一般情况下使用多少占多少的内存
DISK_SPACE=1000*6
# 创建Ramdisk
if [ ! -e $MOUNT_PATH ]; then
echo "["`date`"]" "Create ramdisk..." | tee $LOG
RAMDISK_SECTORS=$(($DISK_SPACE*1024*2))
DISK_ID=$(hdiutil attach -nomount ram://$RAMDISK_SECTORS)
echo "["`date`"]" "Disk ID is :" $DISK_ID | tee -a $LOG
diskutil erasevolume HFS+ $DISK_NAME ${DISK_ID} | tee -a $LOG
elif [[ $1 == "umount" ]]; then
echo "Delete/unmount ramdisk $MOUNT_PATH" hdiutil detach $MOUNT_PATH || umount -f $MOUNT_PATH
exit
fi
# 隐藏分区
chflags hidden $MOUNT_PATH
# 恢复备份
if [ -s $BAK_PATH ]; then
echo "["`date`"]" "Restoring BAK Files ..." | tee -a $LOG
tar -zxvf $BAK_PATH -C $MOUNT_PATH 2>&1 | tee -a $LOG
fi
<<'COMMENT'
例如
DIRS="
/Volumes/Ramdisk/Caches/Google
/Volumes/Ramdisk/Caches/Safari
/Volumes/Ramdisk/Caches/Xcode
/Volumes/RamDisk/Caches/NeteaseMusic
"
COMMENT
DIRS="
/Volumes/Ramdisk/Caches/Xcode
"
for Dir in $DIRS; do
if [ ! -d "$Dir" ]; then
echo "["`date`"]" "Making Directory: $Dir" | tee -a $LOG
mkdir -p "$Dir"
fi
done
# ---------------- syncramdisk.sh ------------------
#!/usr/bin/env sh
# 设置内存盘的名称
DISK_NAME=RamDisk
MOUNT_PATH=/Volumes/$DISK_NAME
# 设置备份文件的保存路径
WORK_PATH=$HOME/.ramdisk
BAK_PATH=$WORK_PATH/$DISK_NAME.tar.gz
LISTFILE=$WORK_PATH/RamDisk_log.txt
# 设置最大的cache大小(MB)
MAX_CACHE_SIZE=1024*6
[ -d $WORK_PATH ] || mkdir $WORK_PATH
# 删除不需要备份的缓存
# rm -rfv /Volumes/RamDisk/Caches/xxx/*
# 备份Ramdisk内容,超过50M的目录直接不再保存
cd $MOUNT_PATH
declare -a fa
i=0
for file in $(du -s Caches/* | sort -n)
do
fa[$i]=$file
let i=i+1
done
size=$((i/2))
echo "file number:"$size
cd $WORK_PATH
echo ".?*">$LISTFILE
for((i=0;i<$size;i++))
do
if ((${fa[$((i*2))]}<(($MAX_CACHE_SIZE*1024*2)) ));then
echo "add:"${fa[$((i*2+1))]}
else
echo ${fa[$((i*2+1))]}>>$LISTFILE
fi
done
if [ -e $MOUNT_PATH ] ; then
cd $MOUNT_PATH
tar --exclude-from $LISTFILE -czf $BAK_PATH .
fi
# ---------------- makeRamDiskWhenRestart.sh ------------------
#!/bin/sh
# 登录时执行 initramdisk.sh
sudo defaults write com.apple.loginwindow LoginHook $HOME/.ramdisk/initramdisk.sh
# 注销时执行syncramdisk.sh
sudo defaults write com.apple.loginwindow LogoutHook $HOME/.ramdisk/syncramdisk.sh
# 查看登录脚本
sudo defaults read com.apple.loginwindow
# ---------------- moveXcodeCacheToRamDisk.sh ------------------
# 创建内存盘:
sh $HOME/.ramdisk/initramdisk.sh
# 在桌面创建内存盘软连接:
ln -s /Volumes/RamDisk ~/Desktop/RamDisk
# 执行下述命令之前请先退出以下软件:Chrome Safari Xcode 网易云音乐
# rm -rf ~/Library/Caches/Google
# ln -s /Volumes/Ramdisk/Caches/Google ~/Library/Caches/Google
# rm -rf ~/Library/Caches/com.apple.Safari
# ln -s /Volumes/Ramdisk/Caches/Safari ~/Library/Caches/com.apple.Safari
rm -rf ~/Library/Developer/Xcode/DerivedData
ln -s /Volumes/Ramdisk/Caches/Xcode ~/Library/Developer/Xcode/DerivedData
# rm -rf ~/Library/Containers/com.netease.163music/Data/Caches
# ln -s /Volumes/RamDisk/Caches/NeteaseMusic ~/Library/Containers/com.netease.163music/Data/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment