Разрешение на выполнение всех файлов, созданных в определенном каталоге по умолчанию
Хотелось бы, чтобы вы знали, есть ли какой-либо метод для предоставления разрешения на выполнение всем файлам, созданным в определенном каталоге по умолчанию.
т.е.
Если я создаю файл, скажем foo.sh
под каталогом fooscripts
, он должен иметь разрешение на выполнение по умолчанию. Но если я создам тот же файл снаружи fooscripts
это должно быть как обычно.
2 ответа
Использование inotifywait
Как уже упоминалось, вы можете использовать inotify-tools
(inotifywait
) следить за изменениями в определенном каталоге, например, с помощью приведенного ниже сценария, а затем рекурсивно устанавливать новые файлы.
Скрипт использует inotifywait
-команда, которая запускается определенными событиями, установленными -e
-option. К счастью, команда может использоваться в сочетании с несколькими типами событий.
Поскольку вы хотите, чтобы файлы внутри каталога были исполняемыми, в сценарии устанавливаются два события:
-e move
который заметит файлы, перемещенные в каталог, и
-e create
который заметит новые файлы, созданные внутри каталога.
Кроме того, варианты:
-m -r
заставить команду выполняться бесконечно ("монитор") и рекурсивно в каталоге, в то время как:
--format '%w%f'
выводит каталог (путь к файлу, %w
) плюс имя файла (%f
) что вызвало событие.
Подробнее о вариантах inotifywait
можно найти здесь, или, как всегда, в man inotifywait
Сценарий
#!/bin/sh
# you might want to change the directory below into the targeted directory
DIR="/home/jacob/Bureaublad/test123"
inotifywait -m -r -e move -e create --format '%w%f' "$DIR" | while read f
do
chmod +x "$f"
done
Как пользоваться
Вам, вероятно, придется установить
inotify-tools
первый:sudo apt-get install inotify-tools
Скопируйте скрипт в пустой файл, сохраните его как
set_executable.sh
В заголовке скрипта укажите путь к целевой папке:
# change the directory below into the targeted directory DIR="/home/jacob/Bureaublad/test123"
... и протестировать скрипт из терминала.
- Если все работает нормально, добавьте скрипт в Startup Applications: Dash > Startup Applications > Add.
Заметка
Обратите внимание, что notifywait
действует на изменения (события). Это означает, что файлы, которые были добавлены или созданы до запуска сценария, не будут задействованы. Также не будут сбрасываться исполняемые файлы, если вы вручную и намеренно установили, что они не будут исполняемыми, пока они находятся внутри целевого каталога.
Вы могли бы использовать inotify
смотреть каталог и chmod
новые файлы.
Вот как узнать о inotify
:
man -k inotify
for i in $( man -k inotify | awk '{ print $1 }' ) ; do
man $i
read -p "Print?: " ans
if [[ "x$ans" = "xy" ]] ; then
man -t $i | lpr -J $i
fi
done
# sr is from surfraw, Shell Users Revoultionary Front Rage Against the Web
sr google inotify