Как я могу удалить каталог Windows без следующих точек соединения?

У меня есть сценарий Perl, который должен удалить каталог со всем его содержанием. Иногда этот каталог содержит точку соединения в другой каталог. Если я rmtree() наивно, rmtree() вызов также удалит все файлы в целевой папке соединения. Я ищу способ не сделать это и вместо этого просто удалить соединение.

Не решения для Perl также ценились бы.

6
задан brian d foy 6 January 2010 в 09:29
поделиться

2 ответа

Я только что набрал в Google "junction point" и нашел способ http://en.wikipedia.org/wiki/NTFS_junction_point

Command Prompt (cmd.exe)

  • The dir команда в Windows 2000 или более поздней версии распознает узловые точки, отображает вместо того чтобы войти списки каталогов (используйте dir с /A или /AL переключатель командной строки).
  • Любой команды, которые обычно влияют файлы внутри обычного каталога будут ведите себя так же. Таким образом, команда del myjunction не следует использовать - это просто удалит все файлы в целевой каталог.
  • Команды работать нормально перекрёстки, с той оговоркой, которая движется. не даст перекрёстку переместиться на другую. объём (в отличие от Windows Explorer, как упоминалось выше.)
  • The команда rmdir безопасна только в том случае. удаляет точку соединения, а не целевые файлы. Во время прогулки каталог с командной строкой интерфейс, файлы могут быть удалены, но В отличие от исследователя, каталоги могут также быть удалено (используя dirname rmdir /s для пример.)
  • Использование команды linkd с параметром переключатель /d - это безопасный способ удалить Точки соединения.

Из того, что я вижу, можно, например, использовать dir и grep вывод для или использовать Windows rmdir. Я думаю, что вы можете использовать любой из них из Perl через систему .

.
6
ответ дан 8 December 2019 в 18:37
поделиться

To find out where are reparse points (or "junction points", if you will like):

dir /a:l /b > myjunctions.txt

Will show all reparse points in the current directory. Вы можете добавить /s, но учтите, что точки разбора внутри точек разбора также будут перечислены.

Предположим, что myjunctions.txt содержит строку x:\subdir\foo. Чтобы удалить ее, вы выдаете

fsutil reparsepoint "x:\subdir\foo"

И вуаля! Ваша точка пересечения исчезла, а исходный каталог остался нетронутым!

4
ответ дан 8 December 2019 в 18:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: