Как я нахожу и изменяю полномочия на одном типе файла в терминале Ubuntu? [дубликат]

Возможный дубликат:
Как к chmod 755 все каталоги, но никакой файл (рекурсивно)?

Я только что обновил от Ubuntu 8.04 до 9,04, добавил дополнительный HDD для /home и используемый iPod (FAT32, печально) для содержания/передавания файлов тем временем.

Копирование этих файлов назад, я обнаружил, что большинство файлов, думаю из-за выпусков полномочий, сбрасываемых/неправильно набор на FAT32, теперь эффективно было chmod +x'редактор в какой-то момент.

Я задавался вопросом, существует ли простой способ найти все файлы определенного типа (сказать .txt или .css) и канал это непосредственно к chmod -x? Я попытался искать с различными фразами на этом сайте и несколькими другими, но ничего не мог найти. Хотя это может быть проблемой словаря, я предполагаю.

Спасибо за любую справку Вы парни могут обеспечить, и в течение Вашего времени.

1
задан 20.03.2017, 12:17

4 ответа

chmod -R a-x *.txt

был бы пример этого, но необходимо будет повторить его для всех различных шаблонов файла.

3
ответ дан 12.12.2019, 10:50

Командная строка может также использовать синтаксис типа 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 управляют выводами каждая команда, которая сгенерирована к станд., таким образом, Вы видите то, что происходит.

0
ответ дан 12.12.2019, 10:50

Как ответ на Ваш фактический вопрос, находка | xargs решение является правильной.

Однако для рассмотрения корневой проблемы невозможно правильно восстановить все полномочия файла без ссылки. Если у Вас есть пространство, Вы могли бы создать виртуальную машину, установить весь одинаковый пакеты (чтобы узнать, как, поиск dpkg получает установленные выборы) как Ваша реальная машина, и затем "скопируйте" полномочия с помощью chmod's - ссылочная опция.

Если Вы решаете пойти этим путем, я могу отредактировать свое сообщение с более подробными инструкциями.

0
ответ дан 12.12.2019, 10:50

А-ч, узнавая твердый путь необходимо было использовать 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 или какое-либо упоминание о нем обнаружились в других пользователях, определяют местоположение результатов или других поисков, удостоверьтесь, что Ваши файлы истории и так далее являются частными.

0
ответ дан 12.12.2019, 10:50

Теги

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