mirror of
https://github.com/minio/mc.git
synced 2025-11-12 01:02:26 +03:00
- check for config file for each command, prior to error out properly - hostconfig doesn't do any key verification, let client s3 verify it as needed - mc update change URL pointed to dl.minio.io minio server, still not functional yet
346 lines
9.8 KiB
Go
346 lines
9.8 KiB
Go
/*
|
|
* Minio Client (C) 2014, 2015 Minio, Inc.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/minio-io/cli"
|
|
"github.com/minio-io/mc/pkg/console"
|
|
)
|
|
|
|
// List of commands
|
|
var (
|
|
accessCmd = cli.Command{
|
|
Name: "access",
|
|
Usage: "Set permissions [public, private, readonly] for buckets and folders.",
|
|
Action: runAccessCmd,
|
|
CustomHelpTemplate: `Name:
|
|
mc {{.Name}} - {{.Usage}}
|
|
|
|
USAGE:
|
|
mc {{.Name}}{{if .Flags}} [ARGS...]{{end}} PERMISSION TARGET [TARGET...] {{if .Description}}
|
|
|
|
DESCRIPTION:
|
|
{{.Description}}{{end}}{{if .Flags}}
|
|
|
|
FLAGS:
|
|
{{range .Flags}}{{.}}
|
|
{{end}}{{ end }}
|
|
|
|
EXAMPLES:
|
|
|
|
1. Set bucket to "private" on Amazon S3 object storage
|
|
$ mc {{.Name}} private https://s3.amazonaws.com/burningman2011
|
|
|
|
2. Set bucket to "public" on Amazon S3 object storage
|
|
$ mc {{.Name}} public https://s3.amazonaws.com/shared
|
|
|
|
3. Set folder to world readwrite (chmod 777) on local filesystem
|
|
$ mc {{.Name}} public /shared/Music
|
|
|
|
`,
|
|
}
|
|
catCmd = cli.Command{
|
|
Name: "cat",
|
|
Usage: "Concantenate objects or files to standard output",
|
|
Action: runCatCmd,
|
|
CustomHelpTemplate: `NAME:
|
|
mc {{.Name}} - {{.Usage}}
|
|
|
|
USAGE:
|
|
mc {{.Name}}{{if .Flags}} [ARGS...]{{end}} SOURCE {{if .Description}}
|
|
|
|
DESCRIPTION:
|
|
{{.Description}}{{end}}{{if .Flags}}
|
|
|
|
FLAGS:
|
|
{{range .Flags}}{{.}}
|
|
{{end}}{{ end }}
|
|
|
|
EXAMPLES:
|
|
1. Concantenate an object from Amazon S3 object storage to mplayer standard input
|
|
$ mc {{.Name}} https://s3.amazonaws.com/jukebox/klingon_opera_aktuh_maylotah.ogg | mplayer -
|
|
|
|
2. Concantenate a file from local filesystem to standard output.
|
|
$ mc {{.Name}} khitomer-accords.txt
|
|
|
|
3. Concantenate multiple files from local filesystem to standard output.
|
|
$ mc {{.Name}} *.txt > newfile.txt
|
|
`,
|
|
}
|
|
cpCmd = cli.Command{
|
|
Name: "cp",
|
|
Usage: "Copy objects and files from multiple sources single destination",
|
|
Action: runCopyCmd,
|
|
CustomHelpTemplate: `NAME:
|
|
mc {{.Name}} - {{.Usage}}
|
|
|
|
USAGE:
|
|
mc {{.Name}}{{if .Flags}} [ARGS...]{{end}} SOURCE TARGET [TARGET...] {{if .Description}}
|
|
|
|
DESCRIPTION:
|
|
{{.Description}}{{end}}{{if .Flags}}
|
|
|
|
FLAGS:
|
|
{{range .Flags}}{{.}}
|
|
{{end}}{{ end }}
|
|
|
|
EXAMPLES:
|
|
1. Copy list of objects from local file system to Amazon S3 object storage
|
|
$ mc {{.Name}} Music/*.ogg https://s3.amazonaws.com/jukebox/
|
|
|
|
2. Copy a bucket recursively from Minio object storage to Amazon S3 object storage
|
|
$ mc {{.Name}} http://localhost:9000/photos/burningman2011... https://s3.amazonaws.com/private-photos/burningman/
|
|
|
|
3. Copy multiple local folders recursively to Minio object storage
|
|
$ mc {{.Name}} backup/2014/... backup/2015/... http://localhost:9000/archive/
|
|
|
|
4. Copy a bucket recursively from aliased Amazon S3 object storage to local filesystem on Windows.
|
|
$ mc {{.Name}} s3:documents/2014/... C:\backup\2014
|
|
|
|
`,
|
|
}
|
|
|
|
lsCmd = cli.Command{
|
|
Name: "ls",
|
|
Usage: "List files and objects",
|
|
Action: runListCmd,
|
|
CustomHelpTemplate: `NAME:
|
|
mc {{.Name}} - {{.Usage}}
|
|
|
|
USAGE:
|
|
mc {{.Name}} TARGET [TARGET...] {{if .Description}}
|
|
|
|
DESCRIPTION:
|
|
{{.Description}}{{end}}{{if .Flags}}
|
|
|
|
FLAGS:
|
|
{{range .Flags}}{{.}}
|
|
{{end}}{{ end }}
|
|
|
|
EXAMPLES:
|
|
1. List objects recursively on Minio object storage
|
|
$ mc {{.Name}} http://localhost:9000/backup/...
|
|
[2015-03-28 12:47:50 PDT] 34MiB 2006-Jan-1/backup.tar.gz
|
|
[2015-03-31 14:46:33 PDT] 55MiB 2006-Mar-1/backup.tar.gz
|
|
|
|
2. List buckets on Amazon S3 object storage
|
|
$ mc {{.Name}} https://s3.amazonaws.com/
|
|
[2015-01-20 15:42:00 PST] 0B rom/
|
|
[2015-01-15 00:05:40 PST] 0B zek/
|
|
|
|
3. List buckets from Amazon S3 object storage and recursively list objects from Minio object storage
|
|
$ mc {{.Name}} https://s3.amazonaws.com/ http://localhost:9000/backup/...
|
|
2015-01-15 00:05:40 PST 0B zek/
|
|
2015-03-31 14:46:33 PDT 55MiB 2006-Mar-1/backup.tar.gz
|
|
|
|
4. List files recursively on local filesystem on Windows
|
|
$ mc {{.Name}} C:\Users\Worf\...
|
|
[2015-03-28 12:47:50 PDT] 11.00MiB Martok\Klingon Council Ministers.pdf
|
|
[2015-03-31 14:46:33 PDT] 15.00MiB Gowron\Khitomer Conference Details.pdf
|
|
|
|
5. List files non recursively on local filesystem
|
|
$ mc {{.Name}} /usr/lib/llvm-3.4
|
|
[2015-04-01 14:57:17 PDT] 12KiB lib/
|
|
[2015-04-01 14:57:17 PDT] 4.0KiB include/
|
|
[2015-04-01 14:57:10 PDT] 4.0KiB build/
|
|
[2015-04-01 14:57:07 PDT] 4.0KiB bin/
|
|
|
|
`,
|
|
}
|
|
|
|
syncCmd = cli.Command{
|
|
Name: "sync",
|
|
Usage: "Copies files and objects from single source to multiple destinations",
|
|
Action: runSyncCmd,
|
|
CustomHelpTemplate: `NAME:
|
|
mc {{.Name}} - {{.Usage}}
|
|
|
|
USAGE:
|
|
mc {{.Name}} TARGET [TARGET...] {{if .Description}}
|
|
|
|
DESCRIPTION:
|
|
{{.Description}}{{end}}{{if .Flags}}
|
|
|
|
FLAGS:
|
|
{{range .Flags}}{{.}}
|
|
{{end}}{{ end }}
|
|
|
|
EXAMPLES:
|
|
1. Sync an object from local filesystem to Amazon S3 object storage
|
|
$ mc {{.Name}} star-trek-episode-10-season4.ogg https://s3.amazonaws.com/trekarchive
|
|
|
|
2. Sync a bucket recursively from Minio object storage to multiple buckets on Amazon S3 object storage
|
|
$ mc {{.Name}} http://localhost:9000/photos/2014... https://s3.amazonaws.com/backup-photos https://s3.amazonaws.com/my-photos
|
|
|
|
3. Copy a local folder recursively to Minio object storage and Amazon S3 object storage
|
|
$ mc {{.Name}} backup/... http://localhost:9000/archive https://s3.amazonaws.com/archive
|
|
|
|
4. Sync a bucket from aliased Amazon S3 object storage to multiple folders on Windows.
|
|
$ mc {{.Name}} s3:documents/2014/... C:\backup\2014 C:\shared\volume\backup\2014
|
|
|
|
`,
|
|
}
|
|
mbCmd = cli.Command{
|
|
Name: "mb",
|
|
Usage: "Make a bucket or a folder",
|
|
Action: runMakeBucketCmd,
|
|
CustomHelpTemplate: `NAME:
|
|
mc {{.Name}} - {{.Usage}}
|
|
|
|
USAGE:
|
|
mc {{.Name}} TARGET [TARGET...] {{if .Description}}
|
|
|
|
DESCRIPTION:
|
|
{{.Description}}{{end}}{{if .Flags}}
|
|
|
|
FLAGS:
|
|
{{range .Flags}}{{.}}
|
|
{{end}}{{ end }}
|
|
|
|
EXAMPLES:
|
|
1. Create a bucket on Amazon S3 object storage
|
|
$ mc {{.Name}} https://s3.amazonaws.com/public-document-store
|
|
|
|
2. Create a bucket on Minio object storage
|
|
$ mc {{.Name}} http://localhost:9000/mongodb-backup
|
|
|
|
3. Create multiple buckets on Amazon S3 object storage and Minio object storage
|
|
$ mc {{.Name}} https://s3.amazonaws.com/public-photo-store https://s3.amazonaws.com/public-store http://localhost:9000/mongodb-backup
|
|
|
|
`,
|
|
}
|
|
// Configure minio client
|
|
//
|
|
// ----
|
|
// NOTE: that the configure command only writes values to the config file.
|
|
// It does not use any configuration values from the environment variables.
|
|
//
|
|
// One needs to edit configuration file manually, this is purposefully done
|
|
// so to avoid taking credentials over cli arguments. It is a security precaution
|
|
// ----
|
|
//
|
|
configCmd = cli.Command{
|
|
Name: "config",
|
|
Usage: "Generate configuration \"" + mustGetMcConfigPath() + "\" file.",
|
|
Action: runConfigCmd,
|
|
CustomHelpTemplate: `NAME:
|
|
mc {{.Name}} - {{.Usage}}
|
|
|
|
USAGE:
|
|
mc {{.Name}}{{if .Flags}} [ARGS...]{{end}} generate
|
|
mc {{.Name}}{{if .Flags}} [ARGS...]{{end}} alias NAME HOSTURL
|
|
|
|
EXAMPLES:
|
|
1. Generate mc config
|
|
$ mc config generate
|
|
|
|
2. Add alias URLs
|
|
$ mc config alias zek https://s3.amazonaws.com/
|
|
|
|
`,
|
|
}
|
|
updateCmd = cli.Command{
|
|
Name: "update",
|
|
Usage: "Check for new software updates",
|
|
Action: runUpdateCmd,
|
|
CustomHelpTemplate: `Name:
|
|
mc {{.Name}} - {{.Usage}}
|
|
|
|
USAGE:
|
|
mc {{.Name}}{{if .Flags}} [ARGS...]{{end}} check
|
|
mc {{.Name}}{{if .Flags}} [ARGS...]{{end}} install
|
|
|
|
EXAMPLES:
|
|
1. Check for new updates
|
|
$ mc update check
|
|
|
|
2. Download new minio client locally and update
|
|
$ mc update install
|
|
|
|
`,
|
|
}
|
|
)
|
|
|
|
// Collection of mc commands currently supported are
|
|
//
|
|
// ----
|
|
// ls List files and objects
|
|
// cp Copy objects and files from multiple sources to single destination
|
|
// sync Copy objects and files from single source to multiple destionations
|
|
// mb Make a bucket
|
|
// access Set permissions [public, private, readonly] for buckets and folders.
|
|
// cat Concantenate an object to standard output
|
|
// config Generate configuration "/home/harsha/.mc/config.json" file.
|
|
// update Check for new software updates
|
|
// ----
|
|
//
|
|
var commands = []cli.Command{
|
|
lsCmd,
|
|
cpCmd,
|
|
syncCmd,
|
|
catCmd,
|
|
mbCmd,
|
|
accessCmd,
|
|
configCmd,
|
|
updateCmd,
|
|
// Add your new commands starting from here
|
|
}
|
|
|
|
// Collection of mc flags currently supported
|
|
//
|
|
// --theme "minimal"Choose a console theme from this list [*minimal*, nocolor, white]
|
|
// --debug Enable HTTP tracing
|
|
// --quiet, -q Supress chatty console output
|
|
// --retry "5" Number of retry count
|
|
// --version, -v print the version
|
|
//
|
|
var (
|
|
flags = []cli.Flag{
|
|
cli.StringFlag{
|
|
Name: "theme",
|
|
Value: console.GetDefaultThemeName(),
|
|
Usage: fmt.Sprintf("Choose a console theme from this list [%s]", func() string {
|
|
keys := []string{}
|
|
for _, themeName := range console.GetThemeNames() {
|
|
if console.GetThemeName() == themeName {
|
|
themeName = "*" + themeName + "*"
|
|
}
|
|
keys = append(keys, themeName)
|
|
}
|
|
return strings.Join(keys, ", ")
|
|
}()),
|
|
},
|
|
cli.BoolFlag{
|
|
Name: "debug",
|
|
Usage: "Enable HTTP tracing",
|
|
},
|
|
cli.BoolFlag{
|
|
Name: "quiet, q",
|
|
Usage: "Supress chatty console output",
|
|
},
|
|
cli.IntFlag{
|
|
Name: "retry",
|
|
Usage: "Number of retry count",
|
|
Value: 5,
|
|
},
|
|
// Add your new flags starting here
|
|
}
|
|
)
|