Возможный дубликат:
Как к chmod 755 все каталоги, но никакой файл (рекурсивно)?
Я только что обновил от Ubuntu 8.04 до 9,04, добавил дополнительный HDD для /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 получает установленные выборы) как Ваша реальная машина, и затем "скопируйте" полномочия с помощью chmod's - ссылочная опция.
Если Вы решаете пойти этим путем, я могу отредактировать свое сообщение с более подробными инструкциями.
А-ч, узнавая твердый путь необходимо было использовать 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
(без - имя), и затем делают вещи исполняемым файлом по мере необходимости. Возможно, chmod к режиму 664, если Вы закончили со всем режим 777, так как Вы не хотите мировое разрешение записи на своих файлах (или каталоги ни один). Таким образом, на самом деле chmod o-w-R ~ является хорошей идеей.
Некоторые файлы не должны быть читаемыми другими пользователями на той же машине, например, ~/.bash_history, ~/.ssh, ~ / Почта, и таким образом (на основе того, что я имею в своем корневом каталоге, который мог бы на самом деле иметь значение),
cd chmod 600 .bash_history .esd_auth .githistory .ICEauthority .lesshst .mcoprc .netrc* .pulse-cookie .recently-used* .viminfo .Xauthority .xsession-errors chmod 700 .dbus .gconf* .gnome* .gnupg .icedteaplugin .kde .macromedia .metacity Mail .mozilla .openoffice.org* .pulse .purple .Skype .ssh .thumbnails .tsclient .update-notifier chmod 2700 .gnupg # super-ultra-paranoid, I guess. chmod 500 .gvfs # gvfs is weird, and maybe not present on current ubuntu?
скопировать/вставить это в терминал. Не волнуйтесь об ошибках, я уверен, что Вы не имеете всеми одинаковыми dotfiles и каталоги, которые я делаю. (и я не учел много неясных, которые являются действительно просто игрой, сохраняют каталоги и мог быть публично читаемым без вреда.) Обычно, если Вы не хотите, чтобы Ваш притон pr0n или какое-либо упоминание о нем обнаружились в других пользователях, определяют местоположение результатов или других поисков, удостоверьтесь, что Ваши файлы истории и так далее являются частными.