Как создать каталог рекурсивно, включая скрытые файлы или каталоги

37

Похоже, chown с рекурсивным флагом не будет работать со скрытыми каталогами или файлами. Есть ли простой обходной путь для этого?

Тоби
источник

Ответы:

56

Я почти уверен, что -Rфлаг работает - он всегда так и есть для меня. То, что не сработает, и то, что сбило меня с толку в начале использования командной строки, это использование *в каталоге со скрытыми файлами / каталогами. Так делать

$ chown -R /home/user/*

не будет делать скрытые файлы и каталоги. Однако, если вы последуете с

$ chown -R /home/user/.[^.]*

тогда вы будете делать все скрытые файлы, (но не .или ..как /home/user/.*будет делать). Сказав все это, я ожидал бы

$ chown -R /home/user

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

Хэмиш Даунер
источник
3
Выполнение операции с chownкаталогом имеет побочный эффект: вы изменяете права доступа к самому каталогу, а также ко всему его содержимому, что может быть, а может и не быть тем, что вы хотите.
wfaulk
А + работал как шарм для меня.
SuperFamousGuy
Я попытался, chown nginx:nginx -R /path/to/.[^.]*и это только изменило владение скрытыми файлами .dot. не все.
Патрос
@wfaulk Как упомянул @Hamish Downer, вы должны выполнить оба действия *и следовать им, .[.^]*чтобы получить все файлы.
god_is_love
9

я считаю, что следующая команда должна работать для этого

chown -hR userid:usergroup /nameofdirectory/nameofsubdir/
MattrixHax
источник
1
-h влияет на символические ссылки вместо любого ссылочного файла (полезно только в системах, которые могут изменить владельца символической ссылки)
Р. ван Твиск
8

"chown -R" работает, но альтернативой будет использование find.

 find /path/to/dir -exec chown USER {} \;
hayalci
источник
5
обратите внимание, что с помощью GNU find использование +вместо -exe в ;качестве терминатора для -exec будет более эффективным, так как будет использовать минимально необходимое число вилок для сгущения вместо одного разветвления на файл / каталог
рагу
3

Вы можете dotglobвременно изменить атрибут для расширения. файлы, а затем вернуть его.

shopt -s dotglob; chown -R user:group FOLDER; shopt -u dotglob

Больше dotglobможно найти здесь

STDCALL
источник
2

Использование для цикла с ls -Aпараметром, мы можем найти все скрытые файлы и директории исключить .и ..затем изменить владельца для всех скрытых файлов и каталогов.

for i in `ls -A | grep "^\."`;do chown -R user:group $i;done

Используйте xargsопцию сls -A

ls -A | grep "^\." | xargs chown user:group

Для получения более подробной информации нажмите здесь и посетите мой сайт

Ranjeet_Automation_Tester
источник
1

Кроме того, если вы похожи на меня, вы, вероятно, будете использовать chown в основном из текущего каталога. Я привык работает это следующим образом : chown rails.rails -R *. Простое изменение звездочки на точку (сокращение от текущего каталога), например, так: chown rails.rails -R .ввод всех скрытых каталогов.

Craig
источник
2
С побочным эффектом вы меняете права доступа к текущему каталогу, а также ко всему его содержимому, что может быть или не быть тем, что вы хотите.
wfaulk
1

chownбудет работать со скрытыми файлами и каталогами. В следующем примере мы изменим владельца пользователя и группы для всех файлов в ~/some/folder. Все файлы включают в себя все скрытые файлы (например .bashrc, .profileи т. Д.) И папки на ~/some/folderуровне и ниже. В частности, обратите внимание, что мы не хотим менять владельца ~/some, и поэтому мы исключим файл ~/some/..из изменений владельца.

$ cd ~/some/folder 
$ sudo chown -R usrname:grpname . 
$ 
Симус
источник
Это сработало для меня
клор
0

Выбирать ВСЕ файлы в текущем каталоге и подкаталогах для текущего пользователя;

find . -exec chown $(whoami) {} \;

или если пользователь не может создать несколько файлов из-за ограниченных прав доступа;

sudo find . -exec chown $(logname) {} \;
5p0ng3b0b
источник
-2

Вы могли бы сделать что-то вроде

for i in `ls -A`;do chown -R user:group $i;done

Символ -A( заглавная A) важен, поскольку исключает «.» а также '..'

Zypher
источник
Это изменит только файлы и подкаталоги в текущем каталоге, а не какие-либо более низкие уровни. (Это может быть тем, что хочет OP.) Он также будет разбиваться на имена файлов и каталогов с пробелами (или табуляциями) в них.
wfaulk