diff --git a/changelogs/unreleased/bvl-remove-appearance-symlink.yml b/changelogs/unreleased/bvl-remove-appearance-symlink.yml
new file mode 100644
index 0000000000000000000000000000000000000000..2b1c188528ae7c39f3dbc3faddeeb04d43382925
--- /dev/null
+++ b/changelogs/unreleased/bvl-remove-appearance-symlink.yml
@@ -0,0 +1,4 @@
+---
+title: Remove uploads/appearance symlink. A leftover from a previous migration.
+merge_request:
+author:
diff --git a/db/post_migrate/20170406111121_clean_upload_symlinks.rb b/db/post_migrate/20170406111121_clean_upload_symlinks.rb
index 3ac9a6c10bcfb46a8867f27924ed106344c7d65c..fc3a4acc0bb38c4c6fc535108c7dd87e72fdd9b5 100644
--- a/db/post_migrate/20170406111121_clean_upload_symlinks.rb
+++ b/db/post_migrate/20170406111121_clean_upload_symlinks.rb
@@ -6,7 +6,7 @@ class CleanUploadSymlinks < ActiveRecord::Migration
   disable_ddl_transaction!
 
   DOWNTIME = false
-  DIRECTORIES_TO_MOVE = %w(user project note group appeareance)
+  DIRECTORIES_TO_MOVE = %w(user project note group appearance)
 
   def up
     return unless file_storage?
diff --git a/db/post_migrate/20170613111224_clean_appearance_symlinks.rb b/db/post_migrate/20170613111224_clean_appearance_symlinks.rb
new file mode 100644
index 0000000000000000000000000000000000000000..acb895e426f209415e2a16451edd6353c3cdd7c7
--- /dev/null
+++ b/db/post_migrate/20170613111224_clean_appearance_symlinks.rb
@@ -0,0 +1,52 @@
+# See http://doc.gitlab.com/ce/development/migration_style_guide.html
+# for more information on how to write migrations for GitLab.
+
+class CleanAppearanceSymlinks < ActiveRecord::Migration
+  include Gitlab::Database::MigrationHelpers
+  disable_ddl_transaction!
+
+  DOWNTIME = false
+
+  def up
+    return unless file_storage?
+
+    symlink_location = File.join(old_upload_dir, dir)
+
+    return unless File.symlink?(symlink_location)
+    say "removing symlink: #{symlink_location}"
+    FileUtils.rm(symlink_location)
+  end
+
+  def down
+    return unless file_storage?
+
+    symlink = File.join(old_upload_dir, dir)
+    destination = File.join(new_upload_dir, dir)
+
+    return if File.directory?(symlink)
+    return unless File.directory?(destination)
+
+    say "Creating symlink #{symlink} -> #{destination}"
+    FileUtils.ln_s(destination, symlink)
+  end
+
+  def file_storage?
+    CarrierWave::Uploader::Base.storage == CarrierWave::Storage::File
+  end
+
+  def dir
+    'appearance'
+  end
+
+  def base_directory
+    Rails.root
+  end
+
+  def old_upload_dir
+    File.join(base_directory, "public", "uploads")
+  end
+
+  def new_upload_dir
+    File.join(base_directory, "public", "uploads", "system")
+  end
+end
diff --git a/spec/migrations/clean_appearance_symlinks_spec.rb b/spec/migrations/clean_appearance_symlinks_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..9225dc0d89437e25a264c8e5d0599bd298658a26
--- /dev/null
+++ b/spec/migrations/clean_appearance_symlinks_spec.rb
@@ -0,0 +1,46 @@
+require 'spec_helper'
+require Rails.root.join('db', 'post_migrate', '20170613111224_clean_appearance_symlinks.rb')
+
+describe CleanAppearanceSymlinks do
+  let(:migration) { described_class.new }
+  let(:test_dir) { File.join(Rails.root, "tmp", "tests", "clean_appearance_test") }
+  let(:uploads_dir) { File.join(test_dir, "public", "uploads") }
+  let(:new_uploads_dir) { File.join(uploads_dir, "system") }
+  let(:original_path) { File.join(new_uploads_dir, 'appearance') }
+  let(:symlink_path) { File.join(uploads_dir, 'appearance') }
+
+  before do
+    FileUtils.remove_dir(test_dir) if File.directory?(test_dir)
+    FileUtils.mkdir_p(uploads_dir)
+    allow(migration).to receive(:base_directory).and_return(test_dir)
+    allow(migration).to receive(:say)
+  end
+
+  describe "#up" do
+    before do
+      FileUtils.mkdir_p(original_path)
+      FileUtils.ln_s(original_path, symlink_path)
+    end
+
+    it 'removes the symlink' do
+      migration.up
+
+      expect(File.symlink?(symlink_path)).to be(false)
+    end
+  end
+
+  describe '#down' do
+    before do
+      FileUtils.mkdir_p(File.join(original_path))
+      FileUtils.touch(File.join(original_path, 'dummy.file'))
+    end
+
+    it 'creates a symlink' do
+      expected_path = File.join(symlink_path, "dummy.file")
+      migration.down
+
+      expect(File.exist?(expected_path)).to be(true)
+      expect(File.symlink?(symlink_path)).to be(true)
+    end
+  end
+end