Найти файл и изменить разрешения, игнорировать каталоги - PullRequest
0 голосов
/ 08 мая 2018

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

ssh ${DEST_SERV} "find ${DEST_LOCATION} -type f -user a_user -exec chmod 644 {} \;" 

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

find: 0652-081 не может изменить каталог на / usr / local / application / download / sub_directory: : Права доступа к файлу не разрешают указанное действие.

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

1 Ответ

0 голосов
/ 08 мая 2018

У Лоринчи есть действительная точка. Если вас беспокоит только сообщение, просто отправьте его в / dev / null. Но есть и более серьезная проблема, которая может быть тем, что вы хотите решить, а именно: если есть каталоги, вы не хотите тратить время на просмотр этих каталогов.

Ответ на ваш вопрос: -prune. Однако для меня очень сложно понять, как его использовать. Вот пример. Я создал несколько файлов, и если я просто найду, я найду три файла:

find . -name a -print
./a
./b/a
./c/a

Если я добавлю -prune, чтобы не идти вниз по каталогам, которые соответствуют [a-z], то я получу:

find . -type d -name '[a-z]' -prune -o -name a -print
./a

или

find . -type d -regex '\./.*' -prune -o -name a -print
./a

Если вместо этого вы хотите перейти по каталогам, которые пользователь может отключить, а не по каталогам, которые вы не можете отключить, вы можете сделать это с помощью команды find, но это будет длинная сложная команда, использующая -perm для определения «вручную» каталоги, которые пользователь может отключить, а затем - убрать те, которые пользователь не имеет права искать.

...