-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathusercmd_backup_LaunchpadLayout
More file actions
executable file
·109 lines (86 loc) · 4.52 KB
/
Copy pathusercmd_backup_LaunchpadLayout
File metadata and controls
executable file
·109 lines (86 loc) · 4.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#!/usr/bin/env bash
# --------------------------------
# 用于备份LaunchPad的APP分组与布局
# ---------------------------------
#----------------------
# 存放备份的路径
#----------------------
## 设置 iCloud 云盘路径
#ICLOUD_PATH="$HOME/Library/Mobile Documents/com~apple~CloudDocs"
## 获取本机名称(作为子文件夹名称)
#COMPUTER_NAME=$(scutil --get ComputerName)
## 获取当前用户名(作为子文件夹名称) 注意,自动删除用户名中的所有空格!
#USER_NAME=$USER
## 备份目录的起始路径
#BACKUP_PATH="$ICLOUD_PATH/BACKUP/$COMPUTER_NAME/$USER_NAME"
## 备份文件的最终保存路径
#PATH_LaunchpadLayout_BACKUP="$BACKUP_PATH/LaunchpadLayout/$(date +%Y-%m-%d)/"
# 路径:保存日志文件的路径
ICLOUD_PATH="$HOME/Library/Mobile Documents/com~apple~CloudDocs" # 获取 iCloud 云盘路径,
# 生成用于标识设备的目录名称。格式为“型号名称-芯片名称-序列号/用户名”。
# 型号名称取自系统信息的 Model Name 并删除空格;芯片名称去掉 Apple 前缀并删除所有空格;序列号读取系统序列号。
MODEL_NAME_RAW=$(system_profiler SPHardwareDataType 2>/dev/null | awk -F: '/Model Name/{print $2; exit}')
MODEL_NAME_CLEAN=$(echo "${MODEL_NAME_RAW}" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//;s/[[:space:]]//g')
CPU_BRAND_RAW=$(sysctl -n machdep.cpu.brand_string 2>/dev/null)
CPU_BRAND_TRIM=$(echo "${CPU_BRAND_RAW}" | sed 's/^Apple[[:space:]]*//;s/^[[:space:]]*//;s/[[:space:]]*$//')
CPU_BRAND_CLEAN=$(echo "${CPU_BRAND_TRIM}" | sed 's/[[:space:]]//g')
SERIAL_NUMBER_RAW=$(system_profiler SPHardwareDataType 2>/dev/null | awk -F: '/Serial Number/{print $2; exit}')
SERIAL_NUMBER_CLEAN=$(echo "${SERIAL_NUMBER_RAW}" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
USER_NAME="${USER:-$(whoami)}"
DEVICE_DIR="${MODEL_NAME_CLEAN}-${CPU_BRAND_CLEAN}-${SERIAL_NUMBER_CLEAN}"
# 清理多余的连字符
DEVICE_DIR=$(echo "$DEVICE_DIR" | sed 's/--*/-/g; s/^-//; s/-$//')
USER_ID=$(basename "$(dirname "$userTmpDir")") # 提取TMPDIR路径中的随机目录ID
PARENT_DIR=$(find /System/Volumes/Data/private/var/folders/ -maxdepth 2 -type d -name "$USER_ID" -print -quit 2>/dev/null)
# 根据新的目录规则生成 BACKUP 路径。以设备标识目录(型号名称-芯片名称-序列号)为基础,并包含用户名目录。
BACKUP_BASE="$ICLOUD_PATH/BACKUP/${DEVICE_DIR}"
# 如果 BACKUP_BASE 末尾已包含用户名,则不再追加;否则追加用户名目录。
if [[ "$BACKUP_BASE" == */"$USER_NAME" ]]; then
BACKUP_PATH="$BACKUP_BASE"
else
BACKUP_PATH="$BACKUP_BASE/$USER_NAME"
fi
BACKUP_DATE=$(date +%Y-%m-%d)
PATH_LaunchpadLayout_BACKUP="$BACKUP_PATH/LaunchpadLayout/$BACKUP_DATE"
#----------------------
# 源文件的路径
#----------------------
PATH_LaunchpadLayout_plist_SOURCE="$HOME/Library/Preferences"
# 从 TMPDIR 中提取用户特定的 ID
USER_ID=$(basename "$(dirname "$TMPDIR")")
# 查找包含该 ID 的父目录
PARENT_DIR=$(find /System/Volumes/Data/private/var/folders/ -maxdepth 2 -type d -name "$USER_ID" 2>/dev/null)
# 设置 Launchpad 布局源路径
PATH_LaunchpadLayout_db_SOURCE="$PARENT_DIR/0"
# 命令行等效命令
# echo -e $(find $(find /System/Volumes/Data/private/var/folders/ -maxdepth 2 -type d -name "$(basename "$(dirname "$TMPDIR")")" 2>/dev/null) -maxdepth 2 -type d -name "com.apple.dock.launchpad" 2>/dev/null)
SCRIPT_PATH="$(realpath "$0")"
parent_path=$(dirname "$SCRIPT_PATH")
#----------------------
# 创建备份文件夹
#----------------------
mkdir -p "$BACKUP_PATH"
mkdir -p "$PATH_LaunchpadLayout_BACKUP"
#----------------------
# 执行备份操作
#----------------------
cp -rf "$PATH_LaunchpadLayout_plist_SOURCE/com.apple.spaces.plist" "$PATH_LaunchpadLayout_BACKUP/"
cp -rf "$PATH_LaunchpadLayout_plist_SOURCE/com.apple.dock.plist" "$PATH_LaunchpadLayout_BACKUP/"
sudo cp -rf "$PATH_LaunchpadLayout_db_SOURCE/com.apple.dock.launchpad" "$PATH_LaunchpadLayout_BACKUP/"
cp "$SCRIPT_PATH" "$PATH_LaunchpadLayout_BACKUP/"
cp "$parent_path/usercmd_restore_LaunchpadLayout" "$PATH_LaunchpadLayout_BACKUP/"
cd "$PATH_LaunchpadLayout_BACKUP"
sudo chmod -R 755 ./com.apple.dock.launchpad
#----------------------
# 显示结果
#----------------------
echo -e "备份 “桌面图标” 已完成!!!"
ls -l "$PATH_LaunchpadLayout_BACKUP"
#----------------------
# 调试信息(可选)
#----------------------
echo -e ""
echo -e "TMPDIR: $TMPDIR"
echo -e "USER_ID: $USER_ID"
echo -e "PARENT_DIR: $PARENT_DIR"
echo -e "PATH_LaunchpadLayout_db_SOURCE: $PATH_LaunchpadLayout_db_SOURCE"