4

У меня есть более 50 папок, каждая из которых содержит большое количество данных, которые необходимо обработать. Все они обрабатываются с использованием одного и того же кода с использованием os.path.dirname(os.path.realpath(file)), чтобы получить каталог, в котором находится скрипт Python, поэтому пользователю не требуется ручное редактирование, они просто нужно дважды щелкнуть.

Мне нужно, чтобы скрипт отображался в каждой папке, хотя на самом деле он находится только в 1 месте, поэтому я могу отредактировать его один раз, а затем, когда он будет запущен из любого из этих мест, путь к папке будет правильным. Альтернативой является редактирование мастера, а затем вставка одной папки за раз, хотя все 50+ папок каждый раз, когда я обновляю код, что очень утомительно и подвержено ошибкам. В Linux я мог установить это с помощью символической ссылки, но я не могу найти способ сделать это в Windows.

Альтернативно, способ вставить файл во все целевые каталоги одновременно, а не по одному за раз, достиг бы той же цели.

2 ответа2

13

Вам нужна символическая ссылка или жесткая ссылка.

Символьные ссылки (или символические ссылки для краткости) очень похожи на ярлыки: существует один фактический файл и несколько ссылок (символических ссылок) на него. У них даже есть этот маленький значок стрелки на них. В отличие от ярлыков, символические ссылки могут иметь любое расширение.

Жесткие ссылки привязывают файл на жестком диске к месту в дереве каталогов. Каждый файл имеет хотя бы одну жесткую ссылку, иначе он не будет существовать ни в одном каталоге. Если файл имеет несколько жестких ссылок, исходную ссылку невозможно отличить, и файл физически существует только в одном месте.

Оба имеют свои ограничения:

  • Некоторые программы не очень хорошо работают с символическими ссылками
  • Удаление оригинального файла оставляет все его ссылки неработающими
  • Вы не можете жестко связать папки (но вы можете создать соединение каталогов, если символической ссылки недостаточно)
  • Создание перекрестных жестких ссылок невозможно

Симлинки обычно достаточно.

Чтобы создать символическую ссылку или жесткую ссылку:

  1. Запустите привилегированную командную строку: нажмите Win, введите cmd , нажмите Ctrl+Shift+Enter
  2. Выполните команду mklink :

    • mklink link_name link_target для файла символическая ссылка
    • mklink /d link_name link_target для папки символьная ссылка
    • mklink /h link_name link_target для жесткой ссылки на файл
    • mklink /j link_name link_target для соединения каталогов
1

В Win Vista и новее вы можете создавать сим-ссылки или жесткие ссылки, которые ведут себя так, как вы ожидаете в Linux. Вы можете создать жесткую ссылку или символическую ссылку с помощью команды MKLINK встроенной в Windows Visa и более поздних версий. (Создание сим-ссылок требует прав администратора.)

Или, для альтернативы, которую вы упомянули, если папки - это просто непосредственные подпапки папки, в которой находится скрипт, вы можете сделать это в командной строке в папке скрипта:

for /d %D in (*) do (copy /y "myscript.py" "%D")

обновить их за один раз. Если вы пишете эту команду в пакетном режиме, вам нужно использовать следующий код:

for /d %%D in (*) do (copy /y "myscript.py" "%%D")

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .