Bash script, watch folder, execute command

后端 未结 12 1337
小鲜肉
小鲜肉 2020-12-04 08:57

I am trying to create a bash script with 2 parameters:

  • a directory
  • a command.

I want to watch the

12条回答
  •  心在旅途
    2020-12-04 09:13

    Here's a template to work with, it'll check every 120 seconds for changes in passed directory and notify on creation of directories,files,or names pipes. If you also want to run commands when something is removed then check my other answer on stackoverflow for additional looping examples.

    #!/usr/bin/env bash
    Var_dir="${1:-/tmp}"
    Var_diff_sleep="${2:-120}"
    Var_diff_opts="--suppress-common-lines"
    Func_parse_diff(){
        _added="$(grep -E '>' <<<"${@}")"
        if [ "${#_added}" != "0" ]; then
            mapfile -t _added_list <<<"${_added//> /}"
            _let _index=0
            until [ "${#_added_list[@]}" = "${_index}" ]; do
                _path_to_check="${Var_dir}/${_added_list[${_index}]}"
                if [ -f "${_path_to_check}" ]; then
                    echo "# File: ${_path_to_check}"
                elif [ -d "${_path_to_check}" ]; then
                    echo "# Directory: ${_path_to_check}"
                if [ -p "${_path_to_check}" ]; then
                    echo "# Pipe: ${_path_to_check}"
                fi
                let _index++
            done
            unset _index
        fi
    }
    Func_watch_bulk_dir(){
        _current_listing=""
        while [ -d "${Var_dir}" ]; do
            _new_listing="$(ls "${Var_dir}")"
            _diff_listing="$(diff ${Var_dec_diff_opts} <(${Var_echo} "${_current_listing}") <(${Var_echo} "${_new_listing}"))"
            if [ "${_diff_listing}" != "0" ]; then
                Func_parse_diff "${_diff_listing}"
            fi
            _current_listing="${_new_listing}"
            sleep ${Var_diff_sleep}
        done
    }
    

    Hint if you replace the echo lines above with eval for each type of action monitored for you'll be all the closer to automation of actions. And if you wish to see what the above looks like when used within a script then check out the latest script version for the project I've been working on for automation of encryption and decryption via gpg and tar.

提交回复
热议问题