Как рекурсивно удалить разрешения на выполнение из файлов, не трогая папки?

Вот несколько возможных команд, включая пример вывода

Самый простой:

$ find / -iname "*.htm*"
foo/a.HTM
foo/b.HTML
foo/b.html
foo/x.htmx
foo/a.htm
bar/a.htm

-iname означает поиск файлов, соответствующих glob, и нечувствительность к регистру. Проблема в том, что glob *. Htm * также находит htmx .

Чтобы предотвратить нахождение htmx , вам нужно разделить глобус:

$ find / -iname "*.htm" -o -iname "*.html"
foo/a.HTM
foo/b.HTML
foo/b.html
foo/a.htm
bar/a.htm

Или использовать команду grep, которая может использовать регулярное выражение:

$ find / | grep -i "\.html*$"
foo/a.HTM
foo/b.HTML
foo/b.html
foo/a.htm
bar/a.htm

Обратите внимание, что регулярное выражение отличается от глобуса. В частности, точка (. ) и звезда ( * ) имеют очень разные значения в glob и regex.

См. https://en.wikipedia.org/wiki/Glob_ (программирование) #Compared_to_regular_expressions для получения дополнительной информации.

45
19.07.2016, 23:36
0 ответов

Теги

Похожие вопросы