关于node.js:是否可以检查在exec中运行的shell命令中是否存在文件夹?

Is it possible to check if a folder exists inside a shell command running in exec?

我正在尝试使用exec在节点中创建一个oneliner。其想法是创建一个名为admin的文件夹,并将文件解压缩到其中,因此:

1
2
mkdir admin
tar xvfz release.tar.gz -C admin/

问题是,有时管理员存在(它是确定的,我想覆盖它的内容),并且使用exec将触发一个错误:

1
2
3
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/so,新的untar将重新启动,但同样,该命令将失败。

PS:我知道我可以在午餐前与FS核对文件夹,但我对一个多功能一体的Exec解决方案感兴趣。(如果可能的话)

编辑:只有当目录不存在时,如何使用mkdir这个问题?与此类似,但它仅仅是关于mkdir的特定使用,而是关于连接和错误传播。


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

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

把你的一行变成:

1
2
3
exec('mkdir -p admin && tar xvfz release.tar.gz -C admin/', (err, stdout, stderr) => {
  // continue
});

或者,您也可以使用;而不是&&来链接调用,这些调用将始终持续,无论退出代码:

1
2
3
exec('mkdir admin; tar xvfz release.tar.gz -C admin/', (err, stdout, stderr) => {
  // continue
});