如何在Mac上的Dropbox中递归忽略node_modules



我想保留我所有的节点项目保存在Dropbox中,除非我想排除所有node_modules目录同步到Dropbox。

我曾经通过在不同的位置保持这些目录的符号链接来实现这一点,但是最近的npm版本已经破坏了这种能力,不允许npm_modules是一个符号链接。

下面的命令将从Dropbox中查找并添加所有顶级node_module目录。也就是说,它会在另一个node_modules目录中添加node_module目录,而不是node_module目录(因为顶级目录已经被忽略了)。

find ~/Dropbox  -type d | grep 'node_modules$' | grep -v '/node_modules/' | xargs -I {} -t -L 1 xattr -w com.dropbox.ignored 1 "{}"

命令分解:

  • 查找~/Dropbox中的所有目录
  • 使用grep只过滤到以node_modules
  • 结尾的目录
  • 使用grep从这些目录中排除也包含node_modules/**
  • 使用xargs将此目录作为参数传递
  • xattr命令告诉dropbox忽略它

**如果目录以node_modules结尾,但也包含node_modules/,则该目录包含在更高级别的node_modules目录中,因此我们可以跳过它,因为我们已经忽略了更高级别的目录。


感谢@shuckster的以下建议,消除了额外的grep步骤:

-prune查找选项可以比两个grep管道更快地执行上述任务:

find ~/Dropbox -name node_modules -prune | xargs -I {} -t -L 1 xattr -w com.dropbox.ignored 1 "{}"

这里解释了完整的命令。


感谢@shuckster提供了以下bash函数,该函数将在npm安装后自动运行

此外,我发现在.bashrc中为npm创建一个函数很有帮助,该函数在安装后执行权限更新:

npm() {
case "$1" in
"install"|"i"|"ci")
command npm "$@"
if [[ $? -eq 0 && -d ./node_modules ]]; then
xattr -w com.dropbox.ignored 1 ./node_modules
echo "Added Dropbox-ignore permission to node_modules"
fi
;;
*)
command npm "$@"
;;
esac
}

相关内容

  • 没有找到相关文章

最新更新