
У меня установлен 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
Каталог назначения
Вы можете использовать опцию -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, разрешения на выполнение устанавливаются. Я не уверен, почему, но подозреваю, что каким-то образом разрешения находятся под влиянием списков контроля доступа 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