mirror of
https://github.com/rclone/rclone.git
synced 2024-11-22 16:34:30 +01:00
sync: make --suffix-keep-extension preserve 2 part extensions like .tar.gz
If a file has two (or more) extensions and the second (or subsequent) extension is recognised as a valid mime type, then the suffix will go before that extension. So `file.tar.gz` would be backed up to `file-2019-01-01.tar.gz` whereas `file.badextension.gz` would be backed up to `file.badextension-2019-01-01.gz` Fixes #6892
This commit is contained in:
parent
01fa15a7d9
commit
8fb9eb2fee
@ -1840,6 +1840,12 @@ would be backed up to `file.txt-2019-01-01` and with the flag it would
|
|||||||
be backed up to `file-2019-01-01.txt`. This can be helpful to make
|
be backed up to `file-2019-01-01.txt`. This can be helpful to make
|
||||||
sure the suffixed files can still be opened.
|
sure the suffixed files can still be opened.
|
||||||
|
|
||||||
|
If a file has two (or more) extensions and the second (or subsequent)
|
||||||
|
extension is recognised as a valid mime type, then the suffix will go
|
||||||
|
before that extension. So `file.tar.gz` would be backed up to
|
||||||
|
`file-2019-01-01.tar.gz` whereas `file.badextension.gz` would be
|
||||||
|
backed up to `file.badextension-2019-01-01.gz`.
|
||||||
|
|
||||||
### --syslog ###
|
### --syslog ###
|
||||||
|
|
||||||
On capable OSes (not Windows or Plan9) send all log output to syslog.
|
On capable OSes (not Windows or Plan9) send all log output to syslog.
|
||||||
|
@ -618,9 +618,24 @@ func SuffixName(ctx context.Context, remote string) string {
|
|||||||
return remote
|
return remote
|
||||||
}
|
}
|
||||||
if ci.SuffixKeepExtension {
|
if ci.SuffixKeepExtension {
|
||||||
ext := path.Ext(remote)
|
var (
|
||||||
base := remote[:len(remote)-len(ext)]
|
base = remote
|
||||||
return base + ci.Suffix + ext
|
exts = ""
|
||||||
|
first = true
|
||||||
|
ext = path.Ext(remote)
|
||||||
|
)
|
||||||
|
for ext != "" {
|
||||||
|
// Look second and subsequent extensions in mime types.
|
||||||
|
// If they aren't found then don't keep it as an extension.
|
||||||
|
if !first && mime.TypeByExtension(ext) == "" {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
base = base[:len(base)-len(ext)]
|
||||||
|
exts = ext + exts
|
||||||
|
first = false
|
||||||
|
ext = path.Ext(base)
|
||||||
|
}
|
||||||
|
return base + ci.Suffix + exts
|
||||||
}
|
}
|
||||||
return remote + ci.Suffix
|
return remote + ci.Suffix
|
||||||
}
|
}
|
||||||
|
@ -371,9 +371,14 @@ func TestSuffixName(t *testing.T) {
|
|||||||
{"test.txt", "-suffix", false, "test.txt-suffix"},
|
{"test.txt", "-suffix", false, "test.txt-suffix"},
|
||||||
{"test.txt", "-suffix", true, "test-suffix.txt"},
|
{"test.txt", "-suffix", true, "test-suffix.txt"},
|
||||||
{"test.txt.csv", "-suffix", false, "test.txt.csv-suffix"},
|
{"test.txt.csv", "-suffix", false, "test.txt.csv-suffix"},
|
||||||
{"test.txt.csv", "-suffix", true, "test.txt-suffix.csv"},
|
{"test.txt.csv", "-suffix", true, "test-suffix.txt.csv"},
|
||||||
{"test", "-suffix", false, "test-suffix"},
|
{"test", "-suffix", false, "test-suffix"},
|
||||||
{"test", "-suffix", true, "test-suffix"},
|
{"test", "-suffix", true, "test-suffix"},
|
||||||
|
{"test.html", "-suffix", true, "test-suffix.html"},
|
||||||
|
{"test.html.txt", "-suffix", true, "test-suffix.html.txt"},
|
||||||
|
{"test.csv.html.txt", "-suffix", true, "test-suffix.csv.html.txt"},
|
||||||
|
{"test.badext.csv.html.txt", "-suffix", true, "test.badext-suffix.csv.html.txt"},
|
||||||
|
{"test.badext", "-suffix", true, "test-suffix.badext"},
|
||||||
} {
|
} {
|
||||||
ci.Suffix = test.suffix
|
ci.Suffix = test.suffix
|
||||||
ci.SuffixKeepExtension = test.keepExt
|
ci.SuffixKeepExtension = test.keepExt
|
||||||
|
Loading…
Reference in New Issue
Block a user