Мне трудно решить эту проблему.
напишите скрипт оболочки для проверки прав на исполнение всех файлов в текущем каталоге. Если файл не имеет прав на исполнение, сделайте его исполняемым пользователем.
Я думал, что если пройтись по всем файлам в текущем каталоге и записать вывод в текстовый файл, а затем прочитать четвертый символ каждой строки и проверить, является ли он «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 *
[..]