diff --git a/lib/ls.go b/lib/ls.go index e3068f28..16641966 100644 --- a/lib/ls.go +++ b/lib/ls.go @@ -360,10 +360,16 @@ Usage: `, } +type listOptionType struct { + startTime int64 + endTime int64 +} + // ListCommand is the command list buckets or objects type ListCommand struct { command Command payerOption oss.Option + listOption listOptionType filters []filterOptionType } @@ -396,6 +402,8 @@ var listCommand = ListCommand{ OptionMarker, OptionUploadIDMarker, OptionEncodingType, + OptionStartTime, + OptionEndTime, OptionInclude, OptionExclude, OptionAllversions, @@ -449,6 +457,12 @@ func (lc *ListCommand) RunCommand() error { } } + lc.listOption.startTime, _ = GetInt(OptionStartTime, lc.command.options) + lc.listOption.endTime, _ = GetInt(OptionEndTime, lc.command.options) + if lc.listOption.endTime > 0 && lc.listOption.startTime > lc.listOption.endTime { + return fmt.Errorf("start time %d is larger than end time %d", lc.listOption.startTime, lc.listOption.endTime) + } + if cloudURL.bucket == "" { return lc.listBuckets("") } @@ -675,7 +689,6 @@ func (lc *ListCommand) displayObjectsResult(lor oss.ListObjectsResult, bucket st if i == 0 && !shortFormat && !directory && len(lor.Objects) > 0 { fmt.Printf("%-30s%12s%s%12s%s%-36s%s%s\n", "LastModifiedTime", "Size(B)", " ", "StorageClass", " ", "ETAG", " ", "ObjectName") } - var num int64 if !directory { num = lc.showObjects(lor, bucket, shortFormat, limitedNum) @@ -713,6 +726,11 @@ func (lc *ListCommand) showObjects(lor oss.ListObjectsResult, bucket string, sho break } + if (lc.listOption.startTime > 0 && object.LastModified.Unix() < lc.listOption.startTime) || + (lc.listOption.endTime > 0 && object.LastModified.Unix() > lc.listOption.endTime) { + continue + } + if !doesSingleObjectMatchPatterns(object.Key, lc.filters) { continue } diff --git a/lib/rm.go b/lib/rm.go index 69a8e845..d22bc01f 100644 --- a/lib/rm.go +++ b/lib/rm.go @@ -18,6 +18,8 @@ type removeOptionType struct { recursive bool force bool typeSet int64 + startTime int64 + endTime int64 //version versionId string @@ -323,6 +325,8 @@ var removeCommand = RemoveCommand{ OptionMultipart, OptionAllType, OptionEncodingType, + OptionStartTime, + OptionEndTime, OptionInclude, OptionExclude, OptionVersionId, @@ -403,6 +407,12 @@ func (rc *RemoveCommand) RunCommand() error { return nil } + rc.rmOption.startTime, _ = GetInt(OptionStartTime, rc.command.options) + rc.rmOption.endTime, _ = GetInt(OptionEndTime, rc.command.options) + if rc.rmOption.endTime > 0 && rc.rmOption.startTime > rc.rmOption.endTime { + return fmt.Errorf("start time %d is larger than end time %d", rc.rmOption.startTime, rc.rmOption.endTime) + } + // start progressbar go rc.entryStatistic(bucket, cloudURL) @@ -808,6 +818,10 @@ func (rc *RemoveCommand) removeSpecialCharacterObjects(bucket *oss.Bucket, cloud func (rc *RemoveCommand) getObjectsFromListResult(lor oss.ListObjectsResult) []string { objects := []string{} for _, object := range lor.Objects { + if (rc.rmOption.startTime > 0 && object.LastModified.Unix() < rc.rmOption.startTime) || + (rc.rmOption.endTime > 0 && object.LastModified.Unix() > rc.rmOption.endTime) { + continue + } if doesSingleObjectMatchPatterns(object.Key, rc.filters) { objects = append(objects, object.Key) }