Это также, вероятно, работало бы
chmod +x $(find . -type f -print0 | xargs -0 file | grep "ELF [^,;]* executable" | cut -d: -f1)
У Вас все еще будут проблемы, если Ваши файлы будут иметь пробелы, вкладки, новые строки, звездочки, вопросительные знаки, угловую скобку или символы обратной косой черты на имена, или если существуют слишком многие из них для помещений в одну командную строку.
Нет никакого полностью надежного способа поместить невидимую метку в текстовый файл. Текстовый файл не имеет никакой комнаты ни для чего, что не является простым текстом, в конце концов. Комментарии (текст, который не принадлежит основного текста) являются формой разметки.
Пустые байты являются плохой идеей не только потому, что они могут быть представлены как ^@
или ␀
или �
или другие пути, но также и потому что много инструментов обработки текста дросселируют на них. Пустые байты являются маркером конца строки на языке программирования C, и много программ рассматривают его как конец текстового блока (например, строки, но не обязательно), потому что они записаны в C или пользуются библиотеками, записанными в C.
Если Ваш текст кодируется в Unicode, можно использовать один из его нескольких символов нулевой ширины:
Пробелы не являются составляющими слова, другие. Хотя ни один из этих символов явно не представляется (принятие средства просмотра с разумной поддержкой Unicode), это оказывает влияние при выборе текста, перемещения, поиска, и т.д. Повреждающееся пространство может быть представлено как разрыв строки.
Вы можете grep
для пустого указателя или других специальных символов с помощью -P
флаг и шестнадцатеричный код:
echo -e "a\0b\nhello" | grep -a -P '\x0'
Вы могли также скрыть текст путем помещения символов возврата после них, например:
$ echo -e "the matrix\0\0\0\0\n\bh\ba\bs\b \by\bo\bu\b\0\0:-)"
the matrix
:-)
$ echo -e "the matrix\0\0\0\0\n\bh\ba\bs\b \by\bo\bu\b\0\0:-)" | hexdump -C
00000000 74 68 65 20 6d 61 74 72 69 78 00 00 00 00 0a 08 |the matrix......|
00000010 68 08 61 08 73 08 20 08 79 08 6f 08 75 08 00 00 |h.a.s. .y.o.u...|
00000020 3a 2d 29 0a |:-).|
00000024