Разрешение на выполнение всех файлов, созданных в определенном каталоге по умолчанию

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

т.е.

Если я создаю файл, скажем 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

Как пользоваться

  1. Вам, вероятно, придется установить inotify-tools первый:

    sudo apt-get install inotify-tools
    
  2. Скопируйте скрипт в пустой файл, сохраните его как set_executable.sh

  3. В заголовке скрипта укажите путь к целевой папке:

    # change the directory below into the targeted directory
    DIR="/home/jacob/Bureaublad/test123"
    

    ... и протестировать скрипт из терминала.

  4. Если все работает нормально, добавьте скрипт в 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
Другие вопросы по тегам