Специальные расширения файлов CHMOD 777 в Терминале

Я пытаюсь использовать CHMOD 777 для всех файлов .doc на своем Mac. Есть ли способ сделать это через Терминал?

__

Спасибо за ответы. Я думал, что это способ изменить права доступа к файлам документов Word. У меня есть 2 пользователя на Mac, которые делятся папкой. Но когда один создает файл документа, другой просто имеет права на чтение. Я хочу, чтобы это было у них обоих или у всех. Это не имеет значения. Я также хочу вернуться и задним числом сделать все предыдущие документы, некоторые из которых у пользователя A есть разрешения на чтение и запись, а некоторые из которых у пользователя B есть разрешения на чтение и запись, чтение и запись для них обоих. Есть другой способ сделать это? Насколько я могу судить, это проблема с разрешениями Mac, а в Word ничего. Я думал, что это можно сделать с помощью CHMOD 777 в терминале.


person user3277306    schedule 05.02.2014    source источник
comment
Почему вы хотите установить их все в режим 777? Файлы .doc не являются исполняемыми, поэтому предоставление им прав на выполнение не имеет особого смысла ...   -  person Gordon Davisson    schedule 06.02.2014


Ответы (3)


Используйте find и xargs или -exec параметр find.

/home/erjablow> find . -name "*.doc" | xargs -n 3 chmod a+rwx
                # Find the names of all "doc" files beneath the current directory.
                # Gather them up 3 at a time, and execute
                # chmod a+rwx file1 file2 file3
                # on each set.

Теперь find - неприятная утилита, и ее трудно использовать. Он может творить нелепые вещи, и одна орфографическая ошибка может испортить вам день.

Почему вы хотите, чтобы все файлы документов были незащищенными?

person Eric Jablow    schedule 05.02.2014
comment
Почему -n 3? Просто позвольте xargs передать как можно больше аргументов chmod. Кроме того, я думаю, что на Mac, вероятно, будут файлы или каталоги с пробелами в их именах; ваша команда может применить chmod к файлам или каталогам, для которых вы этого не хотите. - person Keith Thompson; 06.02.2014
comment
Простое выполнение одного за раз приводит к слишком большому количеству снарядов. Я стараюсь осторожно относиться к количеству аргументов. Возможно, это глупо. Я не уверен, как правильно цитировать аргументы в xargs. - person Eric Jablow; 07.02.2014
comment
В этом случае я бы просто уронил -n 3 и был уверен, что xargs не вызовет переполнения. - person Keith Thompson; 07.02.2014

Не надо.

Если вы действительно хотите это сделать:

find / -x -name `*.doc` -type f -print0 | xargs -0 chmod 777

Я не проверял это. Я не гарантирую, что версии команд find и xargs для Mac поддерживают все эти параметры; Я привык к версиям GNU findutils, которые распространены в системах Linux.

Команда find запускается в корневом каталоге, ограничивая себя (-x) текущей файловой системой, выбирает файлы, имена которых заканчиваются на .doc, и печатает их, разделенные нулевыми символами. Последнее необходимо, если у вас есть файлы или каталоги, имена которых содержат пробелы. Параметр -x эквивалентен параметру -xdev в некоторых других версиях find.

Если вы хотите сопоставить файлы, имена которых указаны в .Doc, .DOC и т. Д., Используйте -iname '*.doc', а не -name '*.doc'.

Команда xargs берет этот список файлов, разделенных нулями, и выполняет chmod 777 для каждого из них, разбивая список на части, которые не будут переполнять командную строку chmod.

Позвольте мне еще раз подчеркнуть, что:

  1. Я не тестировал указанную выше команду. В настоящее время у меня нет доступа к системе MacOS; Я только что прочитал соответствующие страницы руководства в Интернете. Если вы хотите выполнить пробный прогон, замените xargs на echo xargs; он напечатает команды, которые он будет выполнять (ожидайте много вывода с очень длинными строками). Или замените xargs на xargs -n 1 echo, чтобы отображать по одной строке для каждого файла.

  2. Во-первых, делать это - плохая идея. 777 дает разрешение на чтение, запись и выполнение каждому пользователю в системе. .doc файлы не являются исполняемыми; давать им разрешение на выполнение не имеет смысла в Unix-подобной системе. 644, вероятно, будет более разумным значением (чтение / запись для владельца, только чтение для всех остальных).

person Keith Thompson    schedule 06.02.2014

Я согласен с предыдущим ответом, что find противно. И подключить его к другой утилите может быть непросто. Если бы мне пришлось это сделать, я бы указал тип файла и использовал бы функцию find exec вместо xargs.

find / -x -type f -iname *.doc \-exec chmod 777 {} \;

-x будет искать только на локальном Macintosh HD и исключать все подключенные тома.

Вы можете рассмотреть другие критерии для уточнения поиска, например, другую отправную точку или исключение определенных папок и / или расширений файлов.

find / -x find / -not \( -path "*/some_sub-folder*" -or -path "*/some_other_sub-folder*" \) -type f \( -iname *.doc -or -iname *.docx \) \-exec chmod 777 {} \;

Или, если вы настроены на использование find|xargs, вам, вероятно, следует попробовать -print вместо -print0, чтобы каждый файл возвращался в виде отдельной строки. Это тоже могло это исправить.

В любом случае, перед этим сделайте резервную копию и внимательно проверьте. Удачи, HTH.

person SaxDaddy    schedule 06.02.2014
comment
Это может вызвать серьезные проблемы, если в именах файлов или каталогов есть пробелы. - person Keith Thompson; 06.02.2014
comment
Я не согласен. Я попробовал аналогичный тест для файлов с пробелами в именах, и он работал нормально. Дело в том, что примитив -exec правильно разбирает пробелы в фигурных скобках. - person SaxDaddy; 07.02.2014
comment
Ах ты прав! Я думал о find ... -print | xargs ..., у которого есть проблемы с пробелами (решение - find ... -print0 | xargs -0). Но ты делаешь не это. Подход find | xargs действительно позволяет избежать однократного вызова команды chmod для каждого файла, но это, вероятно, не является серьезной проблемой. (Меня действительно беспокоит, что общесистемный chmod 777, скорее всего, будет действительно плохой идеей, и OP не объяснил, почему он хочет это сделать.) - person Keith Thompson; 07.02.2014
comment
Я полностью согласен с этим, но это не моя машина! Я решаю просто для удовольствия. ;-) Кроме того, я изменил свой ответ, заметив, что OP использует print0. Его / ее метод может работать с -print (без нуля). - person SaxDaddy; 07.02.2014
comment
Почему -print работает лучше, чем -print0? OP не упомянул об использовании -print0; это из моего ответа, и это необходимо (если вы используете xargs), чтобы избежать проблем с каталогами и файлами с пробелами в их именах. - person Keith Thompson; 07.02.2014