У меня есть сценарий Perl, который должен удалить каталог со всем его содержанием. Иногда этот каталог содержит точку соединения в другой каталог. Если я rmtree()
наивно, rmtree()
вызов также удалит все файлы в целевой папке соединения. Я ищу способ не сделать это и вместо этого просто удалить соединение.
Не решения для Perl также ценились бы.
Я только что набрал в 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 через систему .
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"
И вуаля! Ваша точка пересечения исчезла, а исходный каталог остался нетронутым!