Слишком длинное имя файла в git для windows

Решение

Способ 1. Уменьшаем путь до файла

Есть несколько способов сократить путь до нужной нам папки.

1. Переименовываем все папки, в которые вложен наш файл, на менее длинные названия. Когда путь сократится, можно выполнить удаление или перемещение.

2. Создаем символьную ссылку на конечный путь. Это можно сделать командой:

mklink /d c:\<короткий путь> c:\<длинный путь>

… например:

mklink /d «C:\Папка0» «C:\Папка\Папка 2\Папка 3\ Папка 4\Папка 5»

* в данном примере перейдя по пути C:\Папка0, мы окажемся в папке C:\Папка\Папка 2\Папка 3\ Папка 4\Папка 5.

3. Сопоставляем папку букве диска с помощью команды subst:

subst S: «C:\Папка\Папка 2\Папка 3\ Папка 4\Папка 5»

* в данном примере мы создадим диск S, который будет вести нас в папку C:\Папка\Папка 2\Папка 3\ Папка 4\Папка 5.

Способ 2. Включаем поддержку длинных файлов

Данный способ поддерживается, начиная с Windows 10 / Server 2016.

Ограничение в 255 символов — пережиток прошлого, необходимый для обеспечения совместимости с другими файловыми системами. Система не будет работать хуже, если данное ограничение отключить.

Открываем реестр (команда regedit) и переходим по пути HKLM\SYSTEM\CurrentControlSet\Control\FileSystem. Находим или создаем ключ LongPathsEnabled с типом REG_DWORD и задаем ему значение 1.

Это же действие из командной строки:

reg delete «HKLM\SYSTEM\CurrentControlSet\Control\FileSystem» /v LongPathsEnabled /f

reg add «HKLM\SYSTEM\CurrentControlSet\Control\FileSystem» /v LongPathsEnabled /t REG_DWORD /d 1

* первая команда, на всякий случай, удалит старый параметр (если его нет, команда вернет ошибку). Вторая — создаст нужный нам ключ.

Способ 3. Far Manager

Устанавливаем программу Far Manager — переходим в нужный каталог и выполняем нужные действия над файлами.

Иногда, данный способ работает только после того, как мы включили поддержку длинных имен (способ 2).

Способ 4. Укорачиваем сетевой путь

Настраиваем сетевой доступ к папке и подключаем ее как сетевой диск. Путь станет меньше.

Например, это можно сделать командой:

net use J: \\server\share /persistent:yes

* данной командой мы создадим диск J, который будет вести на сетевую папку \\server\share.

Как временно исправить проблему с файлами?

Легкое Исправление

Если вам повезет, вы получите ошибку и точно знаете, какое имя файла вызывает проблему. Или, по крайней мере, где найти файл. Может быть, у вас есть имя файла, которое выглядит примерно так:

C:\User\guymc\Documents\My Resumesresumewithanamesolongthatitcausesproblemsandbecomespartofsomeguysarticleonthewebhowdoyoulikemenow.docx

Понятно, кто в этом случае виновник. Найдите файл в проводнике Windows или в проводнике, как он называется в Windows 10, нажмите один раз на него, нажмите F2, чтобы переименовать его, и измените это глупое имя файла на более разумное. Задача решена.

Менее простые исправления

Не всегда легко решить эту проблему. Иногда вы не можете изменить имена файлов или каталогов по любой причине.

Следующие решения помогут вам. Их несложно сделать.

Перемещение, удаление или копирование файлов или каталогов с помощью PowerShell Иногда вы получаете сообщение об ошибке при попытке переместить, удалить или скопировать каталоги, где количество символов для пути к файлу превышает 260.

Обратите внимание, что слова каталог и папка являются взаимозаменяемыми. Мы будем использовать «каталог» в будущем

Следующие командлеты PowerShell также можно использовать для файлов.

Возможно, путь к файлу выглядит примерно так:

C:\Users\guymc\Documents\This\Is\Exactly\The\Precise\Directory\Path\That\I\Need\To\Have\To\Keep\My\Files\Sorted\In\A\Manner\That\Makes\Sense\To\Me\So\Lets\Pretend\This\Is\An\Actual\Filepath\That\You\Might\Also\Have\On\Your\Windows\Computer\And\Not\Over\Think\It\Document.docx

Этот путь к файлу составляет 280 символов. Поэтому мы не можем скопировать каталог оттуда куда-либо еще с помощью обычного метода копирования-вставки. Мы получаем ошибку Destination Path Too Long.

Давайте предположим, что по какой-то причине мы не можем переименовать каталоги, в которые вложен файл. Что мы делаем?

Когда откроется PowerShell, вы окажетесь в корне своего пользовательского каталога. Продолжайте, предполагая, что C:\Users\guymc — ваш пользовательский каталог.

Каталог с именем This находится в каталоге Documents. Чтобы перейти в каталог Documents, мы используем команду .

Вы увидите быстрое изменение текущего каталога на C:\Users\guymc\Documents. Это хорошо. Мы работаем ближе к каталогам, которые облегчат жизнь.

Копирование каталога с использованием Copy-Item

Мы хотим скопировать каталог This и его содержимое в ThatNewFolder. Давайте используем команду PowerShell Copy-Item с параметрами -Destination и -Recurse.

-Destination сообщает PowerShell, где мы хотим, чтобы копия находилась. -Recurse говорит PowerShell скопировать все элементы внутри к месту назначения. Копирование оставляет оригиналы там, где они есть, и делает все новые в месте назначения.

Copy-Item This -Destination ThatNewFolder -Recurse

Переместить каталог с помощью Move-Item

Допустим, мы хотим переместить каталог This, а также все каталоги и файлы в нем, в ThatNewFolder. Перемещение не оставляет оригинал на месте.

Мы можем использовать команду PowerShell Move-Item с параметрами -Path и -Destination. -Path определяет элемент, который мы хотим переместить, и -Destination сообщает PowerShell, где мы хотим его получить.

Команда поместит это в ThatNewFolder. Он также будет перемещать все, что находится внутри этого каталога. Move-Item может использоваться для перемещения файлов или каталогов, и он работает независимо от пути к файлу или длины имени файла.

Move-Item -Path This -Destination ThatNewFolder

Чтобы убедиться, что это работает, используйте команду , чтобы войти в ThatNewFolder. Затем используйте команду для вывода списка каталогов в ThatNewFolder. Вы увидите, что этот каталог находится там.

Удалить каталог с помощью Remove-Item

Если мы хотим удалить этот каталог и все в нем, мы используем команду Remove-Item.

Командлет Remove-Item обладает некоторой встроенной безопасностью, которая затрудняет удаление каталога с содержимым внутри него. В нашем примере мы знаем, что хотим удалить все, поэтому мы будем использовать параметры -Recurse, чтобы заставить его удалять все внутри, и -Force, чтобы он делал это, не спрашивая нас, уверены ли мы в каждом элементе внутри.

Имейте в виду! Восстановить что-либо удаленное таким образом было бы чрезвычайно сложно.

Remove-Item This -Recurse -Force

Вы можете снова использовать команду dir, чтобы убедиться, что она пропала.

Вот и все

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

Сторонние программы

WinRAR

Одна из популярных программ для работы с архивами WinRAR в интерфейсе сжатия файлов/папок имеет опцию их удаления после упаковки. Можно воспользоваться данной функцией архиватора, а затем удалить и сам архив. Недостатком данного метода является то, что при удалении файлов/папок большого размера тратится много времени. Процесс можно ускорить, выбрав метод сжатия «Без сжатия».

FAR Manager

Консольный файловый менеджер FAR Manager позволяет работать с файлами и папками, содержащими неправильные для Windows имена. Он пользовался огромной популярностью в 90-годы во времена Windows 95/98. Последняя на момент написания статьи версия программы прекрасно работает в Windows 10. На официальном сайте присутствует сборка, не требующая установки (кнопка «Архив»).

В программе FAR Manager удалять файлы/папки можно как минимум тремя способами:

  • F8 – в корзину;
  • Shift+Del – минуя корзину;
  • Alt+Del – уничтожение (wipe) файлов.

Удаление файлов в FAR Manager

Запустите FAR Manager, выберите нужный диск в левой панели с помощью комбинации клавиш «Alt+F1» («Alt+F2» для правой). Локализуйте неудаляемый файл или папку на диске. Для перемещения по папкам используйте клавиши со стрелками («Вверх», «Вниз») и «Enter», или мышь. Для удаления выбранного файла/папки нажмите одно из сочетаний клавиш, перечисленных в списке выше, и подтвердите действие клавишей «Enter».

Завершите работу приложения, нажав клавишу «F10» и подтвердив действие.

Исправление имени файла/папки в FAR Manager

Также в FAR Manager можно исправить имя файла или папки, чтобы они корректно работали в Windows и открывались в программах. Для этого на выделенном файле или папке нажмите клавишу «F6» (Переименование/Перемещение), сотрите путь, чтобы сработало только переименование без перемещения, наберите новое имя и нажмите клавишу «Enter».

Суть проблемы

Итак, опишу немного проблему, чтобы вы поняли, о чём идёт речь. Иногда случается такая ситуация, когда путь к каким-либо файлам в операционной системе Windows начинает превышать примерно 260 знаков и с папками или файлами, находящимися “глубже” этого ограничения поделать уже ничего нельзя без дополнительных танцев с бубнами. Будем полагать, что штатный проводник Windows (и многие другие программы) с такими большими путями работать не могут. Но есть ряд программ, которые могут и этим самым доставляют немало хлопот потом. Возможно вы видели нечто подобное:

Такое бывает при работе программ восстановления данных (та же R-Studio переваривает длинные пути, даёт сохранить на компьютер), или при сохранении веб-страниц, распаковке архивов и т.д. Причём удалить такие папки тоже может быть проблематично.

Настройка Windows 10 на обработку длинных путей к файлам

Если вы знаете, что будете часто использовать длинные пути к файлам и длинные имена файлов, вам будет проще заставить Windows работать. Нет смысла использовать PowerShell для выполнения работы каждый день.

Есть два способа сделать это. Один предназначен для пользователей Windows 10 Home, а другой — для пользователей Windows 10 Pro или Enterprise. Эти методы могут работать для Windows 8.1 или более ранней версии, но мы не можем гарантировать это.

Параметры для Windows 10 Home

Чтобы Windows 10 Home принимала длинные пути к файлам, нам нужно открыть редактор реестра . Если вы раньше не работали в редакторе реестра, будьте осторожны. Случайное удаление или изменение здесь может помешать работе Windows полностью.

Всегда делайте резервную копию вашего реестра, прежде чем вносить какие-либо изменения. Узнайте все, что вам нужно знать об этом, в нашем окончательном руководстве по резервному копированию и восстановлению реестра Windows.

Открыв редактор реестра и сделав резервную копию, перейдите в папку HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem и найдите ключ LongPathsEnabled.

Дважды щелкните LongPathsEnabled. Убедитесь, что в поле Значение данные: номер 1 указан. Нажмите OK, чтобы подтвердить изменения.

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

Параметры для Windows 10 Pro или Enterprise

Чтобы позволить Windows 10 Pro или Enterprise использовать длинные пути к файлам, мы будем использовать редактор локальной групповой политики. Это инструмент, который позволяет нам устанавливать политики в отношении работы Windows на компьютере и на уровне пользователей.

Откройте редактор групповой политики, перейдя в меню «Пуск» и набрав gpedit . Лучший результат должен быть Изменить групповую политику. Дважды щелкните по этому.

После открытия редактора групповой политики перейдите к Конфигурация компьютера → Административные шаблоны → Система → Файловая система. Там вы увидите политику включения длинных путей Win32.

Дважды щелкните по нему, чтобы изменить параметр политики. Измените его с «Отключено» на «Включено», затем нажмите кнопку «ОК», чтобы зафиксировать изменение.

Политика может не вступить в силу сразу. Вы можете принудительно обновить групповую политику.

Причины удаления нескольких файлов с длинными именами файлов?

Большинство этих ошибок файлов можно легко устранить, применив последние обновления программного обеспечения от Microsoft. Однако иногда некоторые типы ошибок могут быть тяжелыми для ремонта.

Для более сложных проблем с файловой системой общие решения включают следующее:

  • Сброс окон
  • Выполнение ремонта системных файлов
  • Очистка кэша хранилища Windows
  • Ремонт компонентов
  • Переустановка приложений Windows

Вы также можете использовать Средство проверки системных файлов инструмент для исправления поврежденных и отсутствующих системных файлов. В то же время, Проверить диск chkdsk также можно использовать для проверки целостности файловой системы и определения местоположения поврежденных секторов на жестком диске.

Слишком длинное имя файла?

Ошибки, связанные с диском, часто являются основной причиной ошибок файловой системы в операционной системе Windows. Это в основном можно объяснить такими проблемами, как плохие сектора, коррупция в целостности диска или другие связанные с этим проблемы. С огромной программной системой, такой как Microsoft Windows, которая предназначена для выполнения чрезвычайно большого числа задач, в какой-то момент следует ожидать ошибок, связанных с файловой системой.

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

Что делать, если слишком длинный путь к источнику, как удалить такой файл?

При наличии файла, который не удаляется из-за длинного имени, решить проблему можно несколькими вариантами. Например, файл вложен в несколько каталогов, допустим, пять или даже десять папок, которые имеют названия по 10-20 знаков, то это и может быть причиной не удаления файла. Дело в том, что Windows не поддерживает любые файлы, в названиях которых больше 260 символов. Если этот предел превышен, то появится ошибка, которую я показал выше. Количество папок, имеющие свои названия и само имя файла в сумме должны давать менее 260 символов. В системе также есть одна особенность – при превышении этого ограничения мы всё-таки можем переименовывать папки. А это значит, что необходимо переименовать все папки на короткое имя, например, буква или цифра.

Такая проблема может появиться не только из-за того, что вы дали такое длинное название. У меня это произошло тогда, когда я решил загрузить себе файлы сайты с сервера и кое-что сделать. Так как файлы уже были не нужны, я удалил весь каталог с файлами сайта, но как оказалось он содержал файл с очень длинным именем, плюс названия папок и это не дало мне всё это удалить.

Метод второй поможет, если с первым не удалось. Дело в том, что не все папки, ведущие к файлу с длинным именем, могут переименовываться и будет вылетать всё так же ошибка файловой системы. Тогда вы можете создать виртуальный диск, используя любую из вложенных папок, ведущих к не удаляемому файлу. Сейчас я покажу, как это сделать.

Открываем командную строку. Для этого нажимаем сочетание Win+R и вводим команду cmd. Можно нажать правой кнопкой мыши по меню Пуск (Либо сочетание клавиш Win+X) и выбрать там командную строку.

Теперь вы пишите такую команду, которая сделает для нас виртуальный диск:

subst буква-диска «путь к файлу или папке – это и будет диском»

Нужно выбрать такую букву диска, которая не занята другими. Системный раздел обычно указывается буков C, а второй раздел, как D или E, тогда выбираем любую другую.

Путь к папке нужно указывать от диска. Если у вас это вызывает сложность, то откройте ту папку, которая будет выступать в качестве виртуального диска и в проводнике вверху скопируйте путь до неё.

У меня эта команда выглядит следующим образом:

subst Z: «C:\Users\User\Desktop\3333333333333333333333333333333333333333333333333333\1\1\1»

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

Для того, чтобы виртуальный диск удалить нужно ввести команду:

subst БукваДиска /d

Префикс длинной траектории

У Windows API есть специальная функция, которая поддерживает имена путей Unicode длиной до 32 000 символов (каждый элемент длиной до 255 символов).

Это часто ошибочно называют именным именем UNC, но это не связано с тем, что оно связано.

Префикс, используемый для указания API для использования длинных путей Unicode, это , как в:

Имена UNC обычно используются при обращении к путям на удаленных серверах в форме . Вы можете комбинировать это с префиксом длинного пути так:

Обратите внимание, что некоторые, плохо написанные, но, к сожалению, довольно распространенные приложения не поддерживают пути UNC-файлов или префикс длинного пути. Ссылка:

Ссылка:

Как удалить файл с длиной пути более 260 символов

Не секрет, что проводник windows, как и большинство других windows-приложений, включая PowerShell, не умеют работать с объектами файловой системы с глубокой вложенностью папок, длина пути к которым превышает 260 символов. Причем это ограничение существует только на уровне приложений, а сама файловая система NTFS поддерживает пути к файлам вплоть до 32767 символов.

Данное ограничение наложено библиотекой Win32 API, а которой максимальная  длина пути составляет 260 символов (MAX_PATH=260). В общем случае путь формируется из следующих элементов:  ++[], причем максимальная длина одного каталога/файла в NTFS  — 255 символов в Unicode. При использовании юникодных функций API, возможно использовать путь до 32767 символов. Благодаря этому многие сторонние программы (те же популярные файловые менеджеры, например FAR и Total Commander) без каких-либо трудностей обрабатывает файлы/папки, длина пути к которым превышает 260 символов.

Это ограничение также не действует при сетевом доступе пользователей к файлам по протоколу SMB (за счет этого каталожные структуры с длинными путями нередкость именно на файловых серверах с пользовательскими данными). Администратор, обслуживающий данный сервер не может через стандартный интерфейс проводника windows Explorer управлять (удалять/перемещать) файлы с длинными путями. При попытке создать/скопировать файл в такой каталог, появляется ошибка:

Другие программы/диалоговые окна могут сообщать о наличии ограничения по своему.

Согласитесь забавно, что за окном 2014 год, а мы до сих пор говорим об ограничении в 260 символов на максимальную длину пути в windows… Но похоже в ближайшее время никаких кардинальных изменений не предвидится, и даже в совсем свежей windows 10 Technical Preview это ограничение все еще существует.

В этой статье мы покажем, как в windows можно работать с файлами, путь к которым превышает 260 символов. В данном кейсе наша задача – удалить каталог, содержащий файлы с большой длиной пути.

При попытке удалить такой каталог из проводника появляется ошибка:

Powershell также не умеет корректно обрабатывать каталоги и файлы с большими путями, превышающими 260 символов. При попытке удалить каталог с такими файлами (C:\Install\MS SQL 2012 Express Edition 64 bit\verylongpath) появляется ошибка:

Remove-Item : The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters. At line:1 char:1 + Remove-Item .\verylongpath -Recurse + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo          : WriteError: (C:\Install\MS S…it\verylongpath:String) , PathTooLongExcepti on

+ FullyQualifiedErrorId : RemoveItemIOError,Microsoft.PowerShell.Commands.RemoveItemCommand

Самый простой вариант (он, собственно, и предлагается в окне с ошибкой) – сократить название родительских папок, уменьшив общую длину пути (но применимо не всегда).

Другой вариант – создать символическую ссылку на часть пути, укоротив тем самым общую длину пути:

Далее файловые операции проводить с каталогом, на который назначена символьная ссылка.

Еще один вариант, напоминающий работу с символьной ссылкой  — сопоставить проблемную папку виртуальному диску (в нашем примере X: ), тем самым также сократив длину пути:

Теперь можно работать с данными на диске X:, пути к файлам в котором не будут превышать лимит. После окончания работы можно удалить виртуальный диск:

Но лично мне больше всего для задачи удаления данных в таких ситуациях нравится возможности robocopy.exe, которая поддерживает работу с длинными путями.

С помощью опции /MIR, утилита robocopy может создать полную копию (зеркало) исходного каталога в целевом. И, если исходная папка пустая, все данные в целевой папке также очищаются. Создадим пустую папку C:\Install\test и с помощью аргумента /MIR выполним копирование содержимое тестовой папки в целевую (если имя папки содержит пробелы или кириллические символы, путь нужно взять в кавычки).

После выполнения команды содержимое каталога C:\Install\MS SQL 2012 Express Edition 64 bit\verylongpath очищается (заменятся содержимым пустого каталога).

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

Решение

Способ 1. Subst

Раньше я делал так – с использованием команды subst создавал новую точку монтирования в виде логического диска и прятал за него часть длинного пути. Иной раз повторял раз по 5, чтобы добраться до самого дна и начать удалять эти папки. Ведь удалить их штатным способом не представлялось возможным.

Всякие там Unlocker, Far, Total Commander и прочие – не помогали.

Допустим имеем вот такой путь:

Выполним ряд команд:

Теперь в системе появится новый логический диск K:, внутри которого будет остаток пути “LongDirName\Сохранённые страницы\Удалить потом\Никогда не удалять!!!!!!!\Последняя папка\Новая папка\Новая папка (1)\Новая папка (2)\Новая папка (4)\Окончательный отчёт\Последняя версия\Удалить\Отправлено\С чёрной флешки\Скинуть\От Димона\Присланное\Документы\Новый документ Microsoft Word.doc”

Но и его удалить не получится, нужно делать новую точку монтирования:

Появится новый диск L:, внутри которого остались “От Димона\Присланное\Документы\Новый документ Microsoft Word.doc”

Содержимое L: можно удалить, так как путь уже не такой длинный, затем удалить сам L:

Теперь можно удалить содержимое K:, а затем и сам K:. Ну и остаток пути теперь тоже удалится. Вот так раньше делал я.

Муторно, не правда ли? Не то слово, иной раз приходилось занимать 5-6 букв, чтобы добраться до низа. А там ещё папки ветвились.

Способ 2. Команда robocopy

Совершенно случайно натолкнулся на эту команду. В Windows 7 уже идёт штатно, существует и в более современных версиях. Это просто бомба! Богатый функционал, позволяющий как делать задания на копирования и синхронизацию каталогов, так и, при определённом баловстве ключами, удалять вот такие длинные каталоги. Есть ключи для того, чтобы сделать “зеркало” каталога. Так вот, если сделать зеркало пустого каталога, то целевой каталог тоже станет пустым. Пример такой:

D:\empty – пустой.

Мы хотим отрезать часть пути из нашего примера до “D:\verylongpathname\someofthepath\”. Выполним команду:

MIR – обозначает в данном случае Mirror. И наш последний каталог nameofthelongfilename будет содержать то же самое, что и каталог D:\empty – т.е. пустой. Его можно и удалить при желании.

Посмотрите хелп по этой программе, она реально обладает богатым функционалом. При помощи её я копировал файлы на тот же диск, оставляя прежние атрибуты времени. А как мы смотрели в предыдущей статье, копирование файла создаёт новую запись MFT и у неё будут текущие атрибуты времени (а иногда нужно оставить прежние).

Правда при копировании одиночных файлов немного было неудобно – синтаксис непривычный, ибо команда оперирует не файлами как copy, xcopy и т.д, а каталогами. И чтобы скопировать конкретно файл a.txt из каталога D:\dir1 в C:\dir2 приходится указывать:

Оцените статью
Рейтинг автора
5
Материал подготовил
Андрей Измаилов
Наш эксперт
Написано статей
116
Добавить комментарий