Что это делает? `Find ... -тип d | xargs chmod 770`

369
Zeth

Что делают эти две строки?

find /backup/folder -type d|xargs chmod 770 find /backup/folder -type f|xargs chmod 660 

Я гуглил вокруг, но не могу понять, что d|xargsи f|xargsделает.

1
Объяснив длинный путь в уже существующем ответе, вам не хватает того, что | это труба, соединяющая две разные команды. Часть поиска перед конвейером создает список, затем передается в xargs. Короче говоря, первая находка ищет каталоги (-type d), а вторая находка ищет простые файлы (-type f). Tyson 7 лет назад 0
https://explainshell.com/ slhck 7 лет назад 0

1 ответ на вопрос

3
Kamil Maciorowski

Вы упомянули d|xargsи, f|xargsно ни один из них не имеет смысла сама по себе. Первая команда может быть записана как:

{ find /backup/folder -type d ; } | { xargs chmod 770 ; } 

Таким образом, вопрос может быть: что делает find … | xargs …? Он берет то, что findвыводит и делает его аргументами того, что после xargs.

В первой команде findнаходит все каталоги /backup/folder(включая /backup/folder. Затем xargsвыполняет:

chmod 770 <all_these_directories_here> 

Эффект заключается в том, что все эти права доступа к каталогам теперь доступны 770(если вы не могли изменить их в первую очередь). Это означает полный доступ для владельца, группы, без доступа для других пользователей.

Вторая команда пытается установить 660разрешения для всех файлов (из-за -type f) в /backup/folder. Это означает, что права на чтение и запись для владельца одинаковы для группы, нет доступа для других пользователей.


Примечание chmodимеет -Rпараметр, который делает его рекурсивным. Однако вряд ли это полезно, когда вам нужно установить все разрешения одновременно, потому что вам почти всегда нужны другие разрешения для каталогов, чем для файлов, как в этом случае.

Invoking chmod -R 770 /backup/folderустанавливает все файлы в нем как исполняемые файлы (для их владельца и группы), что редко является тем, что вы хотите. С другой стороны, chmod -R 660 /backup/folderвы не сможете искать каталоги.

Запуск find -type … | xargs chmod …(или find -type … -exec chmod … {} +) с учетом каталогов и (отдельно) файлов - это путь.

Было бы хорошо упомянуть, что `find` и` xargs` желательно использовать только с `-print0` и` -0` соответственно, чтобы сделать его более устойчивым. slhck 7 лет назад 0
Как мне узнать, что означает `d` и` f`? Я не могу найти помощь или документацию для команды find. И slhck - почему найти более «надежный» с этими флагами? Что это меняет? Zeth 7 лет назад 0
@Zeth Прочитайте man-страницу: `найти человека '. Или [документация] (https://www.gnu.org/software/findutils/manual/html_mono/find.html). Об устойчивости: вы хотите, чтобы ваши команды оболочки были устойчивы к файлам, которые содержат необычные символы. В этом случае даже пробел является «необычным», поскольку он может нарушать некоторые команды, особенно те, которые основаны на анализе списков файлов. Например, прочитайте раздел часто задаваемых вопросов 1 здесь: http://mywiki.wooledge.org/BashPitfalls slhck 7 лет назад 2