From 525220b14e2805c07d81a7d1ed3354576f652e53 Mon Sep 17 00:00:00 2001 From: Bob Potter Date: Thu, 18 May 2017 20:04:22 -0500 Subject: [PATCH] Add --local-no-unicode-normalization flag Fixes #1411 --- docs/content/local.md | 12 ++++++++++++ local/local.go | 5 ++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/docs/content/local.md b/docs/content/local.md index 70757a06c..984a0624e 100644 --- a/docs/content/local.md +++ b/docs/content/local.md @@ -120,6 +120,18 @@ $ rclone -L ls /tmp/a 6 b/one ``` +#### --no-local-unicode-normalization #### + +By default rclone normalizes (NFC) the unicode representation of filenames and +directories. This flag disables that normalization and uses the same +representation as the local filesystem. + +This can be useful if you need to retain the local unicode representation and +you are using a cloud provider which supports unnormalized names (e.g. S3 or ACD). + +This should also work with any provider if you are using crypt and have file +name encryption (the default) or obfuscation turned on. + #### --one-file-system, -x #### This tells rclone to stay in the filesystem specified by the root and diff --git a/local/local.go b/local/local.go index 0695f8ba4..6d595f788 100644 --- a/local/local.go +++ b/local/local.go @@ -23,6 +23,7 @@ import ( var ( followSymlinks = fs.BoolP("copy-links", "L", false, "Follow symlinks and copy the pointed to item.") + noUTFNorm = fs.BoolP("local-no-unicode-normalization", "", false, "Don't apply unicode normalization to paths and filenames") ) // Constants @@ -325,7 +326,9 @@ func (f *Fs) cleanRemote(name string) string { f.wmu.Unlock() name = string([]rune(name)) } - name = norm.NFC.String(name) + if !*noUTFNorm { + name = norm.NFC.String(name) + } name = filepath.ToSlash(name) return name }