inotifywait другое действие с файлом или dir

Попробуйте что-то вроде этого:

$ ssh -t yourserver "$(<your_script)"

-t вызывает tty выделение, $(<your_script) читает целый файл, и в этом случается, передает содержание как один аргумент ssh, который будет выполняться оболочкой удаленного пользователя.

Если для сценария нужны параметры, передайте их после сценария:

$ ssh -t yourserver "$(<your_script)" arg1 arg2 ...

Работы для меня, не уверенный, если это универсально все же.

3
31.05.2014, 00:30
2 ответа
[1189180]Для меня работает следующее:

Пример

Ниже показан пример [1189610]inotifywait[1189611], использующий метод, похожий на ваш. Затем я захожу в каталог [1189612]somedir[1189613] и касаюсь профиля, [1189614] касаюсь профиля [1189615]. В результате в окне [1189616]inotifywait[1189617]:

NOTE:[1189619] Чтобы получить все выходные данные из [1189620]inotifywait[1189621], можно слегка изменить свой пример:

И снова коснуться файла командой [1189622]коснуться профиля[1189623], теперь я вижу событие:

Для другого примера, который показывает, как использовать [1189624]inotifywait[1189625], посмотрите на пример, который я показал в своем ответе на этот вопрос под названием: [1189626]Automatically detect when a file has reached a size limit[1189627].

Ваша проблема Я полагаю, что часть вашей проблемы заключается в том, что вы предполагаете, что вывод, возвращаемый из [1189628]inotifywait[1189629] - это просто имя файла, хотя очевидно, что это не из вышеприведенных примеров.

Так что эти [1189630]if[1189631] утверждения никогда не будут успешными:

При разработке таких Bash скриптов как этот часто бывает полезно включить отладку с помощью этой команды сверху:

Вы можете отключить ее с помощью этой команды:

  • Вы можете обернуть участки вашего кода, используя эти сообщения для включения/выключения.
2
27.01.2020, 21:23

Все заработало благодаря предоставленной информации slm: -)

#!/bin/bash

# Written by Jan Duprez and licensed as
# do whatever you want with this but don't come whining
# if you somehow manage to trash your system with it.
# You pressed the buttons, remember?

# This script uses inotifywait to watch a directory and copies
# files or directories moved into it to another folder.

# The commandline parameters are:
# 1 - Directory to watch
# 2 - Directory where new file/folder is copied to
# 3 - UID to use to chmod the file/folder in BOTH dirs
# 4 - GID to use to chmod the file/folder in BOTH dirs
# 5 - permissions to set for the new file/folder in BOTH dirs

dir1=$1
dir2=$2
user=$3
group=$4
perms=$5

# Check if commandline parameters are all there, show reminder if not
if [[ -z $dir1 || -z $dir2 || -z $user || -z $group || -z $perms ]];
then    
    echo -e "Please provide a source dir as 1st parameter"
            echo -e "Please provide a dest dir as 2nd parameter"
            echo -e "Please provide a UID as 3rd parameter"
            echo -e "Please provide a GID as 4th parameter"
            echo -e "Please provide a file permission string (ex 755) as 5th parameter"
    exit
fi

# Good to go, start watching
while true; do

#add -e close_write and -e create for testing
inotifywait -r -e move "$dir1" | while read f; do

#Get part after inotify triggers with awk, remove leading spaces with sed
new=`echo $f | awk '{$1=$2=""; print $0}' | sed 's/^ *//'`
#And the preconstruded full path to avoid ugly buggery between the  [[ ]]    test
test=$dir1$new

    if [[ -d "${test}" ]] ; then
    chown -R $user:$group "$dir1$new"
    chmod -R $perms "$dir1$new"
    cp -R "$dir1$new" "$dir2"
    chown -R $user:$group "$dir2$new"
    fi

    if [[ -f "${test}" ]] ; then
    chown $user:$group "$dir1$new"
    chmod $perms "$dir1$new"
    cp "$dir1$new" "$dir2"
    chown $user:$group "$dir2$new"
    fi
done
done
1
27.01.2020, 21:23

Теги

Похожие вопросы