Mac系统下备份时如何排除node_modules?含外接硬盘备份场景
嘿,这个需求太常见了!不管是本地备份还是同步到外接硬盘,排除node_modules这种动辄几GB的超大目录能省超多时间和空间,给你分享几个Mac终端下的实用方案:
备份时排除node_modules目录的方法(Mac终端适用)
一、用rsync实现精准过滤(首推!)
rsync是Mac自带的强大同步工具,完全能实现类似.gitignore的规则过滤,功能灵活还高效。
基础用法:单次排除node_modules
如果要把本地某个项目目录的内容(除node_modules外)复制到外接硬盘的备份文件夹,命令可以这么写:
rsync -av --exclude='node_modules' /Users/YourName/Projects/MyApp/ /Volumes/MyExternalDrive/MyAppBackup/
- 参数拆解:
-a:归档模式,会保留文件的权限、修改时间、目录结构等所有属性,相当于把-r(递归)、-p(权限)、-t(时间戳)等常用参数打包在一起-v: verbose模式,同步过程中会显示文件列表和进度,方便你确认哪些文件被处理了--exclude='node_modules':明确指定要排除所有名为node_modules的目录或文件(会匹配所有层级的node_modules)
进阶用法:多规则排除/用配置文件管理
如果你有多个要排除的目录(比如.git、dist、临时日志文件),可以多次添加--exclude参数:
rsync -av --exclude='node_modules' --exclude='.git' --exclude='*.log' /Users/YourName/Projects/MyApp/ /Volumes/MyExternalDrive/MyAppBackup/
要是规则太多,像维护.gitignore那样建一个配置文件会更方便——比如创建一个.backupignore文件,每行写一个排除规则:
node_modules .git dist *.log .DS_Store
然后用--exclude-from参数加载这个文件:
rsync -av --exclude-from='/Users/YourName/.backupignore' /Users/YourName/Projects/MyApp/ /Volumes/MyExternalDrive/MyAppBackup/
二、用find+cp组合(备选方案)
如果不想用rsync,也可以用Mac自带的find命令配合cp实现,不过逻辑稍复杂,适合简单场景:
find /Users/YourName/Projects/MyApp -path '*/node_modules/*' -prune -o -exec cp -a {} /Volumes/MyExternalDrive/MyAppBackup/ \;
- 逻辑解释:
-path '*/node_modules/*' -prune:找到所有包含node_modules的路径,直接跳过(不处理这些路径下的内容)-o -exec cp -a {} ...:把剩下的所有文件/目录,用cp -a(归档复制)命令同步到目标路径
⚠️ 注意:这个方法在目录结构复杂时,可能会出现重复创建目录的问题,所以更推荐用rsync。
小提示
- 外接硬盘路径:Mac下外接硬盘默认挂载在
/Volumes/目录下,你可以在Finder里查看硬盘名称,替换成对应的路径(比如/Volumes/我的移动硬盘) - 路径末尾的斜杠:如果源路径末尾加了
/,会把源目录里的内容直接复制到目标目录;如果不加斜杠,会把源目录本身复制到目标目录里,根据你的需求调整就行~
内容的提问来源于stack exchange,提问作者Null isTrue
相关产品推荐
相关产品推荐

