У меня установлен Cygwin на моем Windows 7 64-битном ПК, и я часто скачиваю большие файлы с помощью wget. Однако wget сохраняет все файлы с разрешениями, которые запрещают мне выполнять файлы, когда они являются исполняемыми файлами Windows (.exe или .msi). Могу ли я установить разрешения так, чтобы я мог автоматически запускать эти файлы? Могу ли я также изменить каталог по умолчанию, в который они сохранены? В настоящее время они сохраняются в папке cygwin C:\cygwin64\home\Brenton и я хотел бы сохранить их в C:\Users\Brenton\Downloads .

Для ясности я знаю, как вручную переместить эти файлы в желаемый каталог после их сохранения (например, используя:

mv filename C:\Users\Brenton\Downloads

где filename - это имя файла, которое нужно передать), и я знаю, как изменить разрешения вручную с помощью:

chmod 755 filename

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

1 ответ1

1

Целевой каталог

Вы можете использовать опцию -P prefix / --directory-prefix=prefix чтобы wget для сохранения в определенном каталоге.

Установите префикс каталога в prefix . Префикс каталога - это каталог, в который будут сохранены все остальные файлы и подкаталоги, т.е. верхняя часть дерева поиска. По умолчанию это . (текущий каталог).

Пример сохранения одного файла в вашем каталоге загрузки:

wget -p $(cygpath -u "C:\Users\Brenton\Downloads") http://host.name/setup.exe

Файловые права

В моей системе umask имеет значение 0022 поэтому, когда я использую wget для загрузки файлов в мой домашний каталог Cygwin, файлы имеют права доступа -rw-r--r-- как и ожидалось.

Однако, если я загружаю в каталог Downloads Windows, исполняемые права доступа устанавливаются. Я не уверен, почему, но я подозреваю, что каким-то образом разрешения зависят от ACFS NTFS. Такое поведение также может работать в вашу пользу в вашей системе. Если это так, вы можете использовать простой псевдоним оболочки, такой как:

alias wget-exe='wget -P $(cygpath -u "C:\Users\Brenton\Downloads") '

Предлагаемый скрипт / функция оболочки

Если вам все еще нужно изменить разрешения, вы можете использовать следующий код в качестве основы для скрипта или функции оболочки (называемой что-то вроде wget-exe):

#!/bin/sh
downloads=$(cygpath -u "C:\Users\Brenton\Downloads")
wget -P "$downloads" "$@"

dir="$PWD"
cd "$downloads"
chmod 755 *.exe *.msi
cd "$dir"
# Alternative version using find to change permissions of all .msi and .exe files
# downloaded in the last day.
# find "$downloads" -mtime -1 \( -name '*.exe' -o -name '*.msi' \) -print0 | xargs -0 chmod +w

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