Отмените создание символических ссылок, скопировав оригинал, переименовав файл и удалив ссылку.

Отмените создание символических ссылок, скопировав оригинал, переименовав файл и удалив ссылку.

Я использовал утилиту Windows 7 для удаления точных байт-в-байт дубликатов файлов и замены их символической ссылкой, прежде чем узнал, что тип символической ссылки не разрешен в нашем корпоративном домене. Мне нужен способ отменить все внесенные изменения, но в программе нет способа сделать это.

Можно ли написать какой-то скрипт, который бы находил ссылки, находил файл, удалял ссылку и копировал файл обратно в папку и переименовывал его в соответствии с именем ссылки? Или, может быть, есть какая-то программа, которая это делает?

Спасибо за любую помощь.

решение1

Это тот тип ситуации, когда хорошо спланированная и поддерживаемая стратегия резервного копирования действительно окупается. Если это касается вашей компании, используйте ее.

То, что вы сделали, — плохой способ сэкономить место. Рассмотрим следующий вариант использования:

  1. Пользователь копирует файлы из общего ресурса Deptx, готовясь к работе с ними.
  2. Вы выбрасываете ее копии и создаете символические ссылки на первоисточники.
  3. Она модифицирует оригиналы, которые все еще были нужны другим для их работы.
  4. ...

Если у вас так мало места для хранения, лучше всего составить бизнес-план для покупки дополнительного хранилища. В идеале — решение, которое поддерживает дедупликацию на уровне блоков. Если ваше существующее устройство предлагает дедупликацию, вы могли бы подать запрос на изменение для одобрения, чтобы внедрить ее — но это время прошло.

Заметка на будущее. Как администратор хранилища, вы должны информировать бизнес, когда пора расширять хранилище, что обычно происходит, когда оно заполнено примерно наполовину. Когда оно заполнено на 70%, вы можете начать включать пожарную сигнализацию ежедневно, пока они не назначат бюджет. Если этого не произойдет, пора сообщить им на очень откровенной встрече, что они рискуют бизнесом. Данные — это ядро ​​современного бизнеса.


Вы можете идентифицировать все символические ссылки с помощью:

C:\Users\user>dir /AL /S C:\ | find "SYMLINK"
07/14/2009  01:08 AM    <SYMLINKD>     All Users [C:\ProgramData]

# Only one result in on my Windows 7 host, and it's a system default.
# There are likely more in Windows Server OSs.
# Cmd Explained:
# /AL   A Lists file with attribute:L (Symlinks and dir junctions)
# /S    Do recursively
# C:\   Drive to scan

«All Users» — это символическая ссылка «C:\Users\All Users», которая указывает на «C:\ProgramData». Обратите внимание, что вывод вышеуказанной команды не дает полного пути к символической ссылке, который вам нужен.

<<< СТОП >>> Если количество символических ссылок меньше тысячи, возможно, стоит серьезно задуматься о том, чтобы вручную заменить их целевыми файлами.

Вы можете использовать NTFSLinksView. Похоже, он может экспортировать данные, которые включают в себя полные пути цели и символических ссылок.http://www.nirsoft.net/utils/ntfs_links_view.html

Получив эти значения, вы можете перебрать их с помощью этого фрагмента Powershell. Измените разделитель на тот, который выводит программа. В примере в качестве разделителя используются пробелы. Если используются запятые, используйте: ','. Убедитесь, что в cvs есть только данные Link и Target. В таком порядке.

Примечание: это не сохраняет символические ссылки по умолчанию...

Import-CVS -Delim ' ' -Path input.cvs -Header Link,Target | ForEach-Object {
cmd /c rmdir $Link
Copy-Item $Target $Link
}

ПРЕДУПРЕЖДЕНИЕ: Это не проверено и может нанести еще больший ущерб... Используйте на свой страх и риск. Если предыдущих резервных копий не существует, и вы пришли к такому результату, сделайте резервную копию, прежде чем двигаться дальше.

решение2

Эта проблема возникла не из-за политики домена, а из-за обновления Windows, которое сломало символические ссылки.эта темапомог мне понять настоящую проблему. После удаления обновления и использования командной строки для выполнения этой команды:

fsutil набор поведения SymlinkEvaluation L2L:1 R2R:1 L2R:1 R2L:1

Мне удалось скопировать верхнюю папку на локальный USB-накопитель и восстановить исходные файлы под исходными именами, тем самым исправив большую часть нанесенного мной «ущерба».

Для тех, кто удаляет обновление и использует команду выше, вам нужно сделать обе вещи на обеих машинах, чтобы ссылки работали правильно. Я смог сделать это только на компьютере, который я изначально использовал для дедупликации папки. Я даже не уверен, нужно ли было мне делать какие-либо действия, чтобы скопировать файлы на USB-накопитель и заставить ссылки вести себя так, чтобы я получил исходные файлы. На этом этапе я исправил проблему и мне не нужно продолжать кодирование, которое я делал дальше.

Связанный контент