Как chown/chmod для всех файлов в текущем каталоге?

Как chown/chmod для всех файлов в текущем каталоге?

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

chown username:groupname .

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

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

решение1

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

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

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

решение2

Я думаю, вам это нужно:

chown username:groupname *

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

chown -R username:groupname *

решение3

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

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

Примеры:

% mkmeowner .

% mkmeowner dirpath1 dirpath2
  • mkmeowneroneДля этого необходимо , чтобы в вашем пути находился следующий скрипт .

mkmeвладелец:

#!/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

решение4

Другой способ изменить username:groupnameвсе файлы в текущем каталоге — это работать с подоболочкой:

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

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

Связанный контент