Created
October 22, 2019 04:05
-
-
Save hjeffrey/a86d1b9b4156ccb12be445710300b21a to your computer and use it in GitHub Desktop.
Ramdisk For XCode
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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