chmod -R a-x *.txt
будет примером этого, но вам придется повторить это для всех различных шаблонов файлов.
Возможное дублирование:
Как выполнить chmod 755 для всех каталогов, но без файла (рекурсивно)?
Я только что обновил Ubuntu 8.04 до 9.04, добавил дополнительный жесткий диск /home
и использовал iPod (FAT32, к сожалению) для хранения / передачи файлов между тем.
Копируя эти файлы обратно, я обнаружил, что большинство файлов, я думаю, из-за проблем, связанных с ненадлежащим / ненадлежащим образом установленными разрешениями в FAT32, теперь chmod +x
в какой-то момент эффективно отредактированы.
Мне было интересно, есть ли простой способ найти все файлы определенного типа (скажем .txt
или .css
) и направить их напрямую chmod -x
? Я пробовал поискать по различным фразам на этом сайте и нескольких других, но ничего не смог найти. Хотя это может быть проблема со словарем, я думаю.
Спасибо за любую помощь, которую вы, ребята, можете предоставить, и за ваше время.
chmod -R a-x *.txt
будет примером этого, но вам придется повторить это для всех различных шаблонов файлов.
Командная строка также может использовать синтаксис типа regexp, поэтому вам нужно будет выполнить команду только один раз.
cd /to/my/directory chmod -R a-x *.(txt|css|whatever)
Хорошо, я пытался проверить это, но это не совсем работает, я ищу правильный синтаксис, но я знаю, что это возможно. Спасибо.
Это определенно работает (и, безусловно, излишне):
find /to/my/directory -type f | egrep "(txt|css)$" | xargs -t -i{} chmod a-x {}
Объяснение:
Команда find
выведет список всех файлов, ссылок и каталогов, каждый на отдельной строке. Путь указывает начальную точку. -type f
Параметр определяет, чтобы найти только файлы.
egrep
команда будет выводить каждую строку, которая соответствует регулярному выражению. "(txt|css)$"
Регулярное выражение говорит, что нужно каждый файл, который заканчивается ($) с TXT или CSS.
xargs
команда будет принимать вывод команды и трубы его в вход другой команды (которая приходит после него). например:
$> echo a\nb\nc a b c $> echo a\nb\n\c | xargs echo a b c
как обычно, вы могли бы это сделать, find -type f | xargs echo
но иногда выходной файл может быть очень длинным, если у вас много файлов, поэтому я считаю, что лучше разбить его. Су. опция -i выполняет команду для каждой строки вывода, значение каждой строки сохраняется в переменной, которую я определяю как {}. Команда -t выводит каждую команду, сгенерированную на стандартный вывод, чтобы вы могли видеть, что происходит.
В качестве ответа на ваш актуальный вопрос, найти | Решение XARGS является правильным.
Однако для решения вашей корневой проблемы невозможно правильно восстановить все права доступа к файлу без ссылки. Если у вас есть свободное место, вы можете создать виртуальную машину, установить все те же пакеты (чтобы узнать, как выполнить поиск dpkg get set selection) в качестве реальной машины, а затем «скопировать» разрешения, используя опцию chmod --reference.
Если вы решите пойти по этому пути, я могу отредактировать свой пост с более подробными инструкциями.
Ах, выяснить, как трудно было использовать tar для восстановления / восстановления. :(
find . -type f -name '*.txt' -exec chmod -x {} +
Или с любым другим селектором, который вы хотите, например find -regextype posix-extended . -type f -iregex '.*\.(txt|css|html)' -exec chmod -x {} +
На самом деле, вряд ли что-либо в вашем домашнем каталоге должно быть исполняемым, поэтому я бы начал с простого find -type f
(без -name), а затем сделал бы вещи исполняемыми по мере необходимости. Может быть, chmod в режиме 664, если вы в конечном итоге работали в режиме всего 777, так как вам не нужно разрешение на запись для ваших файлов (или каталогов). На самом деле, chmod ow -R ~ хорошая идея.
Некоторые файлы не должны быть доступны для чтения другим пользователям на той же машине, например ~ / .bash_history, ~ / .ssh, ~ / Mail и т. Д. (В зависимости от того, что у меня есть в домашнем каталоге, что может иметь значение)
CD chmod 600 .bash_history .esd_auth .githistory .ICEauthority .lesshst .mcoprc .netrc * .pulse-cookie. недавно использованный * .viminfo .Xauthority .xsession-errors chmod 700 .dbus .gconf * .gnome * .gnupg .icedteaplugin .kde .macromedia .metacity Почта .mozilla .openoffice.org * .pulse .purple .Skype .ssh .thumbnails .tsclient .update-notifier chmod 2700 .gnupg # супер-ультра-параноик, наверное. chmod 500 .gvfs # gvfs - это странно, а может и не присутствовать в текущей Ubuntu?
скопировать / вставить это в терминал. Не беспокойтесь об ошибках, я уверен, что у вас нет тех же файлов и каталогов, которые есть у меня. (и я пропустил много неясных, которые на самом деле являются просто каталогами для сохранения игр и могут быть публично читаемыми без вреда.) Как правило, если вы не хотите, чтобы ваш pr0n-тайник или какое-либо упоминание о нем появлялось у других пользователей. найдите результаты или другие поиски, убедитесь, что ваши файлы истории и т. д. являются частными.