diff --git a/core/commands/files.go b/core/commands/files.go index 927ce51e2cf..6a1c887069e 100644 --- a/core/commands/files.go +++ b/core/commands/files.go @@ -356,8 +356,14 @@ GC'ed. cmds.StringArg("source", true, false, "Source IPFS or MFS path to copy."), cmds.StringArg("dest", true, false, "Destination within MFS."), }, + Options: []cmds.Option{ + cmds.BoolOption(filesParentsOptionName, "p", "Make parent directories as needed."), + }, Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { + mkParents, _ := req.Options[filesParentsOptionName].(bool) nd, err := cmdenv.GetNode(env) + + prefix, err := getPrefixNew(req) if err != nil { return err } @@ -389,6 +395,13 @@ GC'ed. return fmt.Errorf("cp: cannot get node from path %s: %s", src, err) } + if mkParents { + err := ensureContainingDirectoryExists(nd.FilesRoot, dst, prefix) + if err != nil { + return err + } + } + err = mfs.PutNode(nd.FilesRoot, dst, node) if err != nil { return fmt.Errorf("cp: cannot put node in path %s: %s", dst, err)