Jus*_*hms 5 dropbox node.js npm
我想将所有节点项目保存在 Dropbox 中,但我想排除所有node_modules
目录同步到 Dropbox。
我曾经通过将这些目录符号链接到不同的位置来实现这一点,但最近版本的 npm 不允许npm_modules
成为符号链接,从而破坏了执行此操作的能力。
以下命令将查找并添加 Dropbox 中的所有顶级 node_module 目录。也就是说,它将添加node_module
目录,但不会node_module
添加另一个目录内某处的目录node_modules
(因为顶级目录已被忽略。
find ~/Dropbox -type d | grep 'node_modules$' | grep -v '/node_modules/' | xargs -I {} -t -L 1 xattr -w com.dropbox.ignored 1 "{}"
Run Code Online (Sandbox Code Playgroud)
命令分解:
~/Dropbox
grep
过滤仅以以下结尾的目录node_modules
grep
从这些还包含node_modules/
** 的目录中排除xargs
将此目录作为参数传递xattr
告诉 dropbox 忽略它的命令**如果目录以node_modules
但也包含结尾node_modules/
,则该目录包含在更高级别的node_modules
目录中,因此我们可以跳过它,因为我们已经忽略了更高级别的目录。
感谢 @shuckster 提出以下建议,消除了额外的 grep 步骤:
find-prune
选项可以比两个 grep 管道更快地执行上述任务:
find ~/Dropbox -name node_modules -prune | xargs -I {} -t -L 1 xattr -w com.dropbox.ignored 1 "{}"
Run Code Online (Sandbox Code Playgroud)
完整的命令解释见这里。
感谢 @shuckster 提供以下 bash 函数,该函数将在 npm 安装后自动运行
另外,我发现在我的.bashrc
for中创建一个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
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1411 次 |
最近记录: |