javascript - 如何在nodejs中使用日期制作.tar.gz?
问题描述
请帮助我理解。如何在命令中适应文件夹和存档文件的路径?我想像在 Linux 中一样在存档中添加一个日期,例如 (date +% y-% m-% d)。
const { exec } = require("child_process");
let date = new Date();
var cmd = `'cd /root/mikrotik_weekly_backup/'+ ' '+ 'tar -zxfc router.tar.gz'+'${date}' '/root/mikrotik_weekly_backup'`;
My Output: error: Command failed: 'cd /root/mikrotik_weekly_backup/'+' '+'tar -zxfc router.tar.gz'+'Thu Apr 08 2021 16:10:42 GMT+0300 (Eastern European Summer Time)' /root/mikrotik_weekly_backup
/bin/sh: 1: cd /root/mikrotik_weekly_backup/+ +tar -zxfc router.tar.gz+Thu Apr 08 2021 16:10:42 GMT+0300 (Eastern European Summer Time): not found
解决方案
一些东西:
- 不要
cd
在正在运行的命令中使用,而是使用(和其他人)接受的cwd
选项。exec
- 据我所知,您尝试创建的字符串会
/root/mikrotik_weekly_backup
在写入文件时尝试备份/root/mikrotik_weekly_backup
,这似乎并不理想。 - 尝试使用带有空格且没有转义的字符串附加到文件名是行不通的,因为空格(在命令行中)会分隔参数;在任何情况下,来自对象的默认字符串
Date
都会导致冗长且有问题的文件名。 - 不要尝试构建命令行字符串。相反,使用
spawn
这样您就可以单独传递每个参数,而不必担心
大致:
const { spawn } = require("child_process");
const date = [
date.getFullYear(),
date.getMonth() + 1,
date.getDate(),
date.getHours(),
date.getMinutes(),
date.getSeconds(),
].map(x => String(x).padStart(2, "0")).join("-");
// Or just `const
const child = spawn(
// Command
"tar",
// Arguments
["-zxfc", `router-${date}.tar.gz`, "path/to/what/you/want/backed/up"],
// `spawn` options
{
cwd: "/root/mikrotik_weekly_backup"
}
);
child.on("close", code => {
// ...look at `code` to see what happened...
});
推荐阅读
- ios - 如何在没有登录屏幕的情况下进行谷歌登录。
- svm - 无法使用矢量化获得正确的 SVM 梯度
- angular - 在 Angular 6 中的组件和服务之间共享变量
- ios - CKContainer requestApplicationPermission 网络错误 1202
- java - 以编程方式设置 .fxml 文件
- mysql - Sql Join 查询 - 如果不在连接查询中,则设置默认值
- javascript - 在 React 的数组中的所有元素中更新相同的值
- javascript - 尝试动态包含 SSR 包的组件时,“函数作为 React 子项无效”
- shell - 使用 Unix 命令 shell 如何在不使用 / 和 * 命令的情况下将一个文件移动到子目录中的另一个文件?
- spring-data-cassandra - spring-data-cassandra 性能下降