diff options
| author | mmusante <none@none> | 2007-04-11 09:10:08 -0700 |
|---|---|---|
| committer | mmusante <none@none> | 2007-04-11 09:10:08 -0700 |
| commit | cdf5b4ca0fa5ca7622b06bcb271be9e8a8245fec (patch) | |
| tree | c4bec9f51e851f4223cfda3f1e15c9bf2a9b6abc /usr/src/cmd/zfs | |
| parent | 69648175ab3df6ed66211c75234243dbdf9ddd35 (diff) | |
| download | illumos-joyent-cdf5b4ca0fa5ca7622b06bcb271be9e8a8245fec.tar.gz | |
PSARC 2007/142 zfs rename -r
6479884 want 'zfs rename -r' to recursively rename snapshots
Diffstat (limited to 'usr/src/cmd/zfs')
| -rw-r--r-- | usr/src/cmd/zfs/zfs_main.c | 44 |
1 files changed, 32 insertions, 12 deletions
diff --git a/usr/src/cmd/zfs/zfs_main.c b/usr/src/cmd/zfs/zfs_main.c index 815b72ea75..73b818abd4 100644 --- a/usr/src/cmd/zfs/zfs_main.c +++ b/usr/src/cmd/zfs/zfs_main.c @@ -196,7 +196,8 @@ get_usage(zfs_help_t idx) "\treceive [-vnF] -d <filesystem>\n")); case HELP_RENAME: return (gettext("\trename <filesystem|volume|snapshot> " - "<filesystem|volume|snapshot>\n")); + "<filesystem|volume|snapshot>\n" + "\trename -r <snapshot> <snapshot>")); case HELP_ROLLBACK: return (gettext("\trollback [-rRf] <snapshot>\n")); case HELP_SEND: @@ -1475,7 +1476,7 @@ zfs_do_list(int argc, char **argv) } /* - * zfs rename <fs | snap | vol> <fs | snap | vol> + * zfs rename [-r] <fs | snap | vol> <fs | snap | vol> * * Renames the given dataset to another of the same type. */ @@ -1484,38 +1485,57 @@ static int zfs_do_rename(int argc, char **argv) { zfs_handle_t *zhp; + int c; int ret; + int recurse = 0; /* check options */ - if (argc > 1 && argv[1][0] == '-') { - (void) fprintf(stderr, gettext("invalid option '%c'\n"), - argv[1][1]); - usage(B_FALSE); + while ((c = getopt(argc, argv, "r")) != -1) { + switch (c) { + case 'r': + recurse = 1; + break; + case '?': + default: + (void) fprintf(stderr, gettext("invalid option '%c'\n"), + optopt); + usage(B_FALSE); + } } + argc -= optind; + argv += optind; + /* check number of arguments */ - if (argc < 2) { + if (argc < 1) { (void) fprintf(stderr, gettext("missing source dataset " "argument\n")); usage(B_FALSE); } - if (argc < 3) { + if (argc < 2) { (void) fprintf(stderr, gettext("missing target dataset " "argument\n")); usage(B_FALSE); } - if (argc > 3) { + if (argc > 2) { (void) fprintf(stderr, gettext("too many arguments\n")); usage(B_FALSE); } - if ((zhp = zfs_open(g_zfs, argv[1], ZFS_TYPE_ANY)) == NULL) + if (recurse && strchr(argv[0], '@') == 0) { + (void) fprintf(stderr, gettext("source dataset for recursive " + "rename must be a snapshot\n")); + usage(B_FALSE); + } + + if ((zhp = zfs_open(g_zfs, argv[0], ZFS_TYPE_ANY)) == NULL) return (1); - ret = (zfs_rename(zhp, argv[2]) != 0); + ret = (zfs_rename(zhp, argv[1], recurse) != 0); if (!ret) - zpool_log_history(g_zfs, argc, argv, argv[2], B_FALSE, B_FALSE); + zpool_log_history(g_zfs, argc + optind, argv - optind, argv[1], + B_FALSE, B_FALSE); zfs_close(zhp); return (ret); |
