Назад | Перейти на главную страницу

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

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

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

$ chown -R /home/user/*

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

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

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

$ chown -R /home/user

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

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

chown -hR userid:usergroup /nameofdirectory/nameofsubdir/

"chown -R" работает, но в качестве альтернативы можно использовать find.

 find /path/to/dir -exec chown USER {} \;

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

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

Еще dotglob может быть найден Вот

Использование цикла for с 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

Больше подробностей Нажмите здесь и посетите мой сайт

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

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

$ cd ~/some/folder 
$ sudo chown -R usrname:grpname . 
$ 

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

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

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

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

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

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

В -A (капитал A) важен, поскольку он исключает "." и '..'