Предоставьте файлы пользователям разрешения

Предоставьте файлы пользователям разрешения

Мне трудно решить эту проблему.

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

Я думал, что если пройтись по всем файлам в текущем каталоге и записать вывод в текстовый файл, а затем прочитать четвертый символ каждой строки и проверить, является ли он «x» или «-».

решение1

Идея, которую вы предлагаете, кажется законной, но излишне большой и сложной. Вместо этого вы можете использовать это:

#!/bin/bash
for file in *; do
    [[ -x $file ]] || chmod u+x "$file"
done
  • Это позволит прочитать все файлы ( *) в текущем каталоге.

  • Затем он проверит, является ли файл исполняемым пользователем, запустившим скрипт ( [[ -x $file ]])

  • Если нет ( ||), файл будет сделан исполняемым для пользователя ( chmod u+x "$file").

По умолчанию *не будет сопоставляться со скрытыми файлами, для сопоставления скрытых файлов также добавьте строку

shopt -s dotglob

после линии Шебанга.

Если вы хотите выполнять поиск и работу только с обычными файлами:

#!/bin/bash
for file in *; do
    if [[ -f $file ]]; then
        [[ -x $file ]] || chmod u+x "$file"
    fi
done

решение2

Это простая findкоманда chmod:

find . -type f ! -perm -u+x -exec chmod u+x {} \;

или только для текущей папки:

find . -maxdepth 1 -type f ! -perm -u+x -exec chmod u+x {} \;

Объяснение

  • .

    Начать поиск в текущей папке

  • -maxdepth

    Не рекурсивный

  • -type f

    Только файлы, без папок

  • ! -perm -u+x

    Только файлы без флага исполняемости для владельца файла

  • -exec chmod u+x {}

    Установить флаг исполнения для владельца файла

решение3

Хотелось бы, чтобы вы упомянули, является ли это частью более крупного проекта по автоматизации или просто чем-то, что вы хотите сделать.

Вы можете просто сделать следующее в каталоге:

chmod u+x *

Это добавляет исполняемый статус всем файлам внутри папки для "ваш пользователь". Вы можете попробовать добавить его для "каждый" к

chmod a+x *

Обратите внимание, что ваш пользователь должен иметь разрешение на изменение файлов внутри этой конкретной папки. Это означает, что у вас должно быть 'писать' разрешение. В противном случае вы не сможете ничего изменить. Если ваш пользователь — администратор, вы можете вызвать его с помощью команды sudo:

sudo chmod a+x *

Если файл уже имеет статус исполняемого, нет ничего плохого в том, чтобы снова присвоить ему этот статус. Конечно, как я уже сказал, если только вы не хотите использовать имя всех файлов, чей статус был изменен для другой цели, например, для отчетности. Скрипт heemayl's — хорошая вещь, для таких целей.


Добавлено из комментариев Мостафы Наджафиязди

[..] если он не хочет трогать разрешения папок, которые не имеют разрешения на исполнение, он не должен использовать chmod u+x *[..]

Связанный контент