С awk
можно постараться не читать огромную сумму текста сразу:
awk -vRS='http://' -vORS='\nhttp://' 1 urls.txt > urlsperline.txt
Успех может зависеть от используемого awk
реализация. Например, gawk
хорошо работает, но mawk
катастрофические отказы.
Как мог curl
знайте, что файл является исполняемым файлом? Хорошо технически это могло исследовать свое содержание, но это далеко за пределами какой curl
предназначен, чтобы сделать.
Полномочия по умолчанию определяются umask
(http://en.wikipedia.org/wiki/Umask) и сверху полномочий, полученных из umask
программа может добавить исполняемый бит (или использовать различные полномочия в целом). Например, gcc
знает, что это делает исполняемые файлы и поэтому устанавливает исполнительный бит. С другой стороны, curl
не предназначен для создания исполняемых файлов, и поэтому только использует перманент по умолчанию.
При загрузке файла по HTTP Вы только получаете содержание файла, не его метаданные, такое как его дата создания, полномочия, и т.д.
Используйте другой протокол, который включает эту метаинформацию, или, если у Вас есть доступ к серверу, служите файлу в контейнере, который включает информацию о метаданных, такую как файл tar.
Если это - серьезное повторяющееся разочарование, Вы могли бы также записать обертку для curl
который пытается предположить корректные полномочия и установить их, когда загрузка заканчивается (подсказка: file
типы файлов предположений).
В системах Unix, является ли файл исполняемым файлом или не зависит только от его полномочий, не от его имени или его содержания. (Если формат файла не будет допустимым исполняемым файлом, то система попытается выполнить и рассматривать его как одну из возможных ошибок при выполнении программы, вместе с недостаточными ресурсами, недостающими библиотеками, и т.д.),
Большинство файлов, которые Вы загружаете с сети, не предназначено, чтобы быть исполняемым файлом, таким образом, завихрение не пытается сделать исполняемый файл файла. Даже если бы файл был предназначен, чтобы быть выполненным, то Вы не могли бы хотеть выполнять его теперь; например, Вы могли бы хотеть рассмотреть его и только сделать исполняемый файл файла, если это передает Ваш обзор.
С другой стороны, gcc или любой другой компилятор намеревается произвести исполняемую программу, таким образом, не удивительно, что это сделало бы необходимые шаги. С gcc это - одна из последних стадий процесса компиляции. Можно наблюдать его с strace:
$ strace -f gcc a.c
…
23429 execve("/usr/bin/ld", ["/usr/bin/ld", "--eh-frame-hdr", "-m", "elf_i386", "--hash-style=both", "-dynamic-linker", "/lib/ld-linux.so.2", "-z", "relro", "/usr/lib/gcc/i486-linux-gnu/4.3."..., "/usr/lib/gcc/i486-linux-gnu/4.3."..., "/usr/lib/gcc/i486-linux-gnu/4.3."..., "-L/usr/lib/gcc/i486-linux-gnu/4."..., "-L/usr/lib/gcc/i486-linux-gnu/4."..., "-L/usr/lib/gcc/i486-linux-gnu/4."..., "-L/lib/../lib", ...], [/* 82 vars */]) = 0
…
23429 chmod("a.out", 0755) = 0
23429 exit_group(0) = ?
…
Другими словами, компоновщик, который является последней стадией в компиляции и производит исполняемый файл, изменяет полномочия на выходном файле, чтобы быть исполняемым файлом как его самым последним шагом.
gcc
команда всегда будет файлом, прежде всего, используемым в качестве исполняемого файла.curl
и другие программы будут просто применяться umask
и оставьте любого gun.shoot(self.foot)
пользователю.
file
(главным образом) в состоянии сказать, был ли предназначен файл, чтобы быть исполняемым файлом или нет. Завихрение могло использовать вывод отfile
не имея необходимость реализовывать любой контент-анализ, затем зеркально отразите исполняемый бит. Кто-то должен записать патч для добавления флага для завихрения, который мог сделать это. – Alexander 11.07.2013, 12:47