mirror of
https://github.com/rclone/rclone.git
synced 2024-11-22 08:23:47 +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
|
||||
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 ###
|
||||
|
||||
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
|
||||
}
|
||||
if ci.SuffixKeepExtension {
|
||||
ext := path.Ext(remote)
|
||||
base := remote[:len(remote)-len(ext)]
|
||||
return base + ci.Suffix + ext
|
||||
var (
|
||||
base = remote
|
||||
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
|
||||
}
|
||||
|
@ -371,9 +371,14 @@ func TestSuffixName(t *testing.T) {
|
||||
{"test.txt", "-suffix", false, "test.txt-suffix"},
|
||||
{"test.txt", "-suffix", true, "test-suffix.txt"},
|
||||
{"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", 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.SuffixKeepExtension = test.keepExt
|
||||
|
Loading…
Reference in New Issue
Block a user