Вчера я сделал глупость, которую сегодня понял. Я побежал:
/root# chmod o-rwx * .*
Это должно было удалить разрешения на чтение, запись и выполнение для всех файлов в текущем каталоге (/root
). Как только я это сделал, screen
вёл себя странно, я не мог запускать команды как пользователь без полномочий root, а ssh отказывался работать, если я не вошел в систему с правами root.
Это было вызвано тем, что bash
расширенный .*
к ..
слишком! Теперь, как мне изменить все файлы в каталоге с помощью chmod
, без использования find
, цикл или другой язык, например Perl?
Если вы используете bash, установите dotglob
сделаю *
также сопоставить файлы, начинающиеся с .
.
shopt -s dotglob
echo *
Вы говорите «без использования find», но find действительно является правильным инструментом для этой работы, потому что он обеспечивает высокий уровень контроля. Вы можете указать ему рекурсивно или нет, менять каталоги или нет и т. Д. Например:
find . -maxdepth 1 -type f
find . -maxdepth 1
Поиск обычно не различает обычные файлы и «скрытые» файлы, но не включает ..
. Если вы хотите, чтобы они игнорировались, вы можете добавить '!' -name '.*'
, если вы хотите, чтобы он работал только с точечными файлами, вы можете добавить -name '.*'
.
Еще один приятный момент в том, что вы можете сделать то же самое, и он распечатывает записи, с которыми будет работать. Так что добавьте в конец «| less», и вы сможете увидеть, над чем он будет работать, прежде чем вносить изменения. Этот этап проверки мог предотвратить возникшую проблему.
Если у вас есть команда find, которая вам нравится, вы можете заставить ее запускать команду chmod, добавив -exec chmod o-rwx '{}' ';'
к концу. + Изменить ';'
к +
если ваш find
версия поддерживает это.
На самом деле, find - это инструмент, который вы не должны бояться использовать в подобных ситуациях, это действительно правильный инструмент для работы.
Он короткий и веселый, и не совсем надежный в том смысле, что пропускает точечные файлы со странными именами (например, .+baz
), а как есть очень несколько из них, я научился делать
chmod -R foo:bar * .[0-z]*