Выполнить бит для папок, но не для файлов

У меня есть папка Movies с подпапками Movie1, Movie2 и т. Д., А затем фильм внутри этого подкаталога. Пример ниже:

 Movies:
  Movie1
     film.whatever1
  Movie2
     film.whatever1
  Movie3
     film.whatever1
  Movie4
     film.whatever1
  Movie5
     film.whatever1

Я хочу, чтобы разрешения были 755 для каталогов, чтобы каждый мог перейти к папкам Movie1-5 (единственная причина, по которой это 755, а не 744, заключается в том, что бит выполнения требуется для перехода в каталог). Но я хочу, чтобы все файлы film.whither1-5 были доступны только для чтения. Я не могу на всю жизнь понять, возможно ли это.

Я попытался сделать это с помощью команды setfacl с прописной буквой X, как показано ниже:

 setfacl -R -d -m u::rwx Movies
 setfacl -R -d -m g::r-X Movies
 setfacl -R -d -m o::r-X Movies

 setfacl -R -m u::rwx Movies
 setfacl -R -m g::r-X Movies
 setfacl -R -m o::r-X Movies

В результате он изменил папку и файлы на ОБА, чтобы быть исполняемым. Это очень раздражающая проблема, которую мне нужно решить.

1 ответ

Решение

Ты можешь использовать find запускать различные команды для обычных файлов и каталогов, фильтруя их с помощью -type вариант. Это работает рекурсивно на все внутри ./Movies:

# all directories become 755 (rwx r-x r-x):
find ./Movies -type d -exec chmod 755 '{}' \;

# all files become 644 (rw- r-- r--):
find ./Movies -type f -exec chmod 644 '{}' \;
Другие вопросы по тегам