node.js - 是否可以检查在 exec 中运行的 shell 命令中是否存在文件夹?
问题描述
我正在尝试使用 exec 在节点中创建一个单行器。这个想法是创建一个名为admin的文件夹并将解压缩文件解压缩到其中,因此:
mkdir admin
tar xvfz release.tar.gz -C admin/
问题是,有时admin存在(没关系,我想覆盖它的内容),并且使用 exec 会触发错误:
exec('mkdir admin && tar xvfz release.tar.gz -C admin/', (err, stdout, stderr) => {
if(err) { //mkdir fails when the folder exist }
});
如果 mkdir 失败,有没有办法优雅地继续?理想情况下,我想像 rm -rf admin/ 这样清理 admin 的内容,以便新的 untar 重新开始,但话又说回来,该命令将失败。
PS:我知道我可以在午餐执行之前与 FS 一起检查文件夹,但我对多合一执行解决方案感兴趣。(如果可能的话)
编辑:问题How to mkdir only if a dir 不存在?类似,但仅是关于 mkdir 的具体使用,而是关于连接和错误传播。
解决方案
您不需要mkdir
在现有目标上失败,您可以使用该--parents
标志:
-p, --parents
no error if existing, make parent directories as needed
将您的 oneliner 变成:
exec('mkdir -p admin && tar xvfz release.tar.gz -C admin/', (err, stdout, stderr) => {
// continue
});
或者,您也可以使用;
而不是&&
链接将始终继续的调用,无论退出代码如何:
exec('mkdir admin; tar xvfz release.tar.gz -C admin/', (err, stdout, stderr) => {
// continue
});
推荐阅读
- amazon-web-services - 为 aws cli 上传文件时 S3 密钥中不需要的额外字符
- javascript - 需要一个更智能的 jQuery 表格排序功能
- java - 使用 Maven 构建时自动将文件夹添加到 Deployable zip
- r - r 从多个 R 文件创建文档
- c++ - 加载共享库时出错:libboost_program_options.so.1.65.1
- java - Java regex - 首先需要是字母 X(不区分大小写)其余数字
- python - 稀疏行矩阵会有助于此代码的计算速度吗?
- bash - 使用分隔符将多个文件合并到一个单行文件中
- python - Mac Pycharm 解释器不工作
- c# - c# mvc - 授权ajax函数