1

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

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

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

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

Спасибо за любую помощь, которую вы, ребята, можете предоставить, и за ваше время.

4 ответа4

3
chmod -R a-x *.txt

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

0

Ах, выяснить, как трудно было использовать 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 .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?

скопировать / вставить это в терминал. Не беспокойтесь об ошибках, я уверен, что у вас нет тех же файлов и каталогов, которые есть у меня. (и я пропустил много неясных, которые на самом деле являются просто каталогами для сохранения игр, и которые могут быть публично читаемыми без вреда.) Как правило, если вы не хотите, чтобы ваш pr0n-тайник или какое-либо упоминание о нем отображалось в результатах поиска других пользователей или других результатах поиска, убедитесь, что ваши файлы истории и т.д. Являются конфиденциальными.

0

Командная строка также может использовать синтаксис типа 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

В качестве ответа на ваш актуальный вопрос, найти | Решение XARGS является правильным.

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .