Как выбрать /chmod все файлы в текущем каталоге?

Я пытаюсь изменить владельца и права доступа к некоторым файлам (и каталогам) в текущем каталоге. Я попробовал это:

chown username:groupname .

... ожидая, что это повлияет на все файлы в текущем каталоге, но повлияет только на каталог, в котором я нахожусь (что противоположно тому, что я хочу сделать). Я хочу изменить его для всех файлов, не затрагивая текущий каталог, в котором я нахожусь.

Как я могу chown и chmod все файлы в текущем каталоге?

5 ответов

Решение

Вы хотите использовать chown username:groupname *и пусть оболочка расширяет * к содержанию текущего каталога. Это изменит разрешения для всех файлов / папок в текущем каталоге, но не для содержимого папок.

Вы могли бы также сделать chown -R username:groupname ., что приведет к изменению прав доступа к текущему каталогу, а затем откроется внутри него и всех подпапок для изменения разрешений.

chown -R username:groupname * рекурсивно изменит права доступа ко всем файлам и папкам, оставив текущий каталог в покое. Этот стиль и первый стиль - это то, чем я чаще всего пользуюсь.

Я думаю, что вы хотите это:

chown username:groupname *

Если вы также хотите рекурсивно изменять подкаталоги, вам понадобится -R (-r не рекомендуется)

chown -R username:groupname *

Еще один способ изменитьusername:groupnameвсех файлов в текущем каталоге должен работать с подоболочкой:

      chown username:groupname $(find . -name "[a-zA-Z0-9]*")

Встроенная команда bashfindиспользуется с регулярным выражением[a-zA-Z0-9]*в подоболочке$()которые могут лечь в основу более сложных административных задач.

chown отлично, если вы суперпользователь. У меня была проблема, когда кто-то еще бежал make в моем каталоге, и теперь принадлежат некоторые файлы, которые я не мог изменить. Вот мой обходной путь, который обрабатывает файлы и каталоги, хотя он оставляет каталоги валяться с суффиксом .mkmeowner если он не может удалить их.

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

Примеры:

% mkmeowner .

% mkmeowner dirpath1 dirpath2
  • Требуется следующий скрипт mkmeownerone быть на вашем пути.

mkmeowner:

#!/bin/bash
[ "x$1" == "x-h" ] || [ "x$1" == "x--help" ] && cat << END && exit 0
Usage: $0 dirorfile [direorfile2 ...]:
    change ownership of directories or files to current user.
    Current user must have permissions to read those and write to owner directory.
END
mkmeownerone=`which mkmeownerone`
for d in $*; do
    find "$d" -not -user `whoami` -exec $mkmeownerone {} \;
done

mkmeownerone:

#!/bin/bash
# change ownership of one file or directory
f="$1"
expr match "${f}" '.*\.mkmeowner$' > /dev/null && exit 1 # already tried to do this one
if mv -f "$f" "${f}.mkmeowner"; then
    cp -pr "${f}.mkmeowner" "$f" && rm -rf "${f}.mkmeowner"
    exit 0
fi
exit 1

Мне также нужно было сменить владельца текущего каталога. Ни один из вышеперечисленныхchown .иchown *работал. Мне пришлось передать полный путь к каталогу:

      $ chown -R nobody: "$PWD"

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

Другие вопросы по тегам