【问题标题】:Is it possible to check if a folder exists inside a shell command running in exec?是否可以检查在 exec 中运行的 shell 命令中是否存在文件夹?
【发布时间】:2019-02-06 12:30:58
【问题描述】:

我正在尝试使用 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 does not already exist? 的问题类似,但它是关于 mkdir 单独的具体使用,而是关于连接和错误传播。

【问题讨论】:

  • @GhostCat 请检查我的编辑:)

标签: node.js


【解决方案1】:

您不需要让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
});

【讨论】:

    猜你喜欢
    • 2022-08-14
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 2012-02-05
    • 2020-05-24
    相关资源
    最近更新 更多