Используя umask 0022
перед копированием, вы получите все новые файлы с разрешениями -rw-r - r -
по умолчанию, но файлы можно сделать только исполняемыми вызывая непосредственно на них команду chmod + x.
Вы можете использовать сокращенную команду: chmod -R a + rX directory
, чтобы сделать это вручную.
Чтобы автоматически установить все права доступа к файлам, вы можете использовать inotifywait следующим образом:
inotifywait -qm <directory> -e create -e moved_to -e modify \
| while read a b c; do chmod a+rX "${a}${c}"; done
Существует альтернативный способ загрузки нескольких файлов с помощью curl:
urls="firstUrl secondUrl thirdUrl"
for url in $urls
do
curl -O "$url"
done
Обратите внимание,:обязательный пробел используется для разграничения различных URL-адресов.
Проблема заключается в том, как оболочка (, вероятно, BASH ), интерпретирует команду curl
.
По сути, он смотрит на
curl -O http://domain/path/to/{file1,file2}
и расширяя его до:
curl -O http://domain/path/to/file1 http://domain/path/to/file2
Это проблема, потому что флаг -O
применяется только к первому экземпляру, а не ко всем последующим.
Это можно исправить, заключив URL в двойные кавычки:
curl -O "http://domain/path/to/{file1,file2}"
Команда curl подтвердила это на GitHub и отправила PR как на справочную страницу -, так и в официальное руководство по curl , поэтому они должны отражать это потенциальное поведение подстановки в некоторые снаряды в будущем.
Если вам нужен простой тестовый пример, чтобы увидеть этот сбой и узнать, как его исправить, попробуйте загрузить два ZIP-файла с файлами.txt Моби Дика из Project Gutenberg .
Работает:
curl -O https://www.gutenberg.org/files/2701/2701-{0,h}.zip
предоставит следующий ответ:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 500k 100 500k 0 0 380k 0 0:00:01 0:00:01 --:--:-- 380k
Warning: Binary output can mess up your terminal. Use "--output -" to tell
Warning: curl to output it to your terminal anyway, or consider "--output
Warning: <FILE>" to save to a file.
(Если бы файлы, которые вы загружали, были необработанным текстом, то они просто выгружались бы в стандартный формат, вероятно, ваш экран, и это было бы плохо для Моби Дика , и поэтому файлы.zip используется вместо этого.)
Работает:
curl -O "https://www.gutenberg.org/files/2701/2701-{0,h}.zip"
вместо этого выдаст что-то вроде этого:
[1/2]: https://www.gutenberg.org/files/2701/2701-0.zip --> 2701-0.zip
--_curl_--https://www.gutenberg.org/files/2701/2701-0.zip
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 500k 100 500k 0 0 407k 0 0:00:01 0:00:01 --:--:-- 407k
[2/2]: https://www.gutenberg.org/files/2701/2701-h.zip --> 2701-h.zip
--_curl_--https://www.gutenberg.org/files/2701/2701-h.zip
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 522k 100 522k 0 0 1000k 0 --:--:-- --:--:-- --:--:-- 1000k
Обратите внимание, что эта проблема возникает только тогда, когда { }
используется для подстановки. Если используется только [ ]
, двойные кавычки не нужны.
Между прочим, если wget
установлен, он, вероятно, может обрабатывать подстановку без необходимости кавычек.
Работает:
wget http://domain/path/to/{file1,file2}
вытащил бы оба файла (, если бы они действительно существовали ).
Работает:
wget https://www.gutenberg.org/files/2701/2701-{0,h}.zip
извлечет zip-файлы Moby Dick в соответствии с двойным -цитируемым примером curl
выше.