Вопрос или проблема
Я использую wget для локального резервного копирования удаленного ftp/s каталога с помощью следующего синтаксиса:
wget --no-dns-cache -nv -r -c -l inf -P/local_dir -nH --cut-dirs=1 --restrict-file-names=windows --progress=dot:mega --ftps-implicit (...)
Это wget 1.21 на Raspbian GNU/Linux 11 (bullseye)
# wget --version
GNU Wget 1.21, собранный для linux-gnueabihf.
Я ограничиваю имена файлов до ‘windows’, потому что локальный каталог расшарен по smb для Windows PC.
Проблема, с которой я столкнулся, заключается в том, что некоторые файлы внутри удаленного каталога имеют длинные пути.
В таком случае wget выводит (например):
Имя слишком длинное, всего 240 символов.
Попытка укоротить...
и загружает файл с укороченным именем.
Если в локальной файловой системе нет поддержки длинных путей, такое поведение является необходимым обходным путем и заслуживает одобрения.
Однако в моем случае локальная файловая система поддерживает длинные пути. Я могу создать пути, значительно превышающие 240 символов, с помощью mkdir, cp, mc и так далее. Поэтому ограничение длины имени, введенное wget, является ненужным и вызывает проблемы: некоторые файлы остаются без расширений, некоторые имена обрезаются на символе точки (‘.’), и их имена отображаются неправильно по smb.
Существует ли параметр, позволяющий wget использовать более длинные имена путей?
Ответ или решение
Вопрос о том, может ли wget обрабатывать длинные пути, действительно важен для совместимости с файловыми системами, поддерживающими более длинные имена файлов.
К сожалению, на данный момент в wget нет параметра, который напрямую позволяет отключить ограничения на длину имени файла. Однако есть некоторые решения, которые могут помочь в вашей ситуации.
-
Использование
--restrict-file-names
: Параметр--restrict-file-names
предназначен для ограничения имен файлов в соответствии с правилами для разных операционных систем. В вашем случае, вы используете--restrict-file-names=windows
, что автоматически применяет ограничения Windows на длину имени файла. Если ваш файловый сервер требуется для работы с Windows, вы можете попробовать отказаться от этого параметра. В этом случае, учитывайте, что имена файлов могут быть неправильными на Windows-устройстве и могут вызвать проблемы. -
Настройка файловой системы: Убедитесь, что ваша локальная файловая система действительно поддерживает длинные пути. Если вы находитесь на файловой системе ext4 или другой файловой системе, которая поддерживает длинные имена, то это будет работать. Однако для SMB-подключений вам необходимо удостовериться, что настройки сервера также это поддерживают.
-
Использование альтернативных инструментов: Если wget не удовлетворяет ваши требования, возможно, имеет смысл рассмотреть использование других утилит для загрузки файлов, таких как
curl
илиlftp
. Эти инструменты могут предоставить более гибкие опции для обработки имен файлов. -
Модификация использования wget: Если вы решите продолжить использовать wget, вы можете попробовать пропустить скачивание файлов, которые будут вызывать проблемы с именами, путем фильтрации или выбора определенных подкаталогов. Например, командой
--exclude
или--accept
можно управлять тем, какие файлы будут скачиваться. -
Участие в сообществе разработчиков: В качестве финального шага, вы также можете рассмотреть возможность обращения к разработчикам wget. Поскольку wget — это бесплатный проект с открытым исходным кодом, сообщения об ошибках и предложения улучшений всегда приветствуются.
Подводя итог, скажу, что wget как утилита имеет ограничения касательно длинных путей из-за конфигурации для совместимости с файловыми системами, такими как Windows. Оптимально будет либо изменить настройки, либо рассмотреть альтернативы в зависимости от ваших конкретных нужд.