我正在尝试使用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的特定用途,而是有关级联和错误传播。
答案 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
});