是否可以检查在exec中运行的shell命令中是否存在文件夹?

时间:2018-08-31 13:01:24

标签: node.js

我正在尝试使用exec在节点中创建oneliner。这个想法是创建一个名为 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的特定用途,而是有关级联和错误传播。

1 个答案:

答案 0 :(得分:2)

您不需要让mkdir在现有目标上失败,可以使用--parents标志:

-p, --parents
no error if existing, make parent directories as needed

将您的单线变成:

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
});