用于监视目录并符号链接所有新创建的子目录及其文件的 Bash 脚本

用于监视目录并符号链接所有新创建的子目录及其文件的 Bash 脚本

我需要一个 bash 脚本来递归地监视文件夹并将每个新文件和子目录符号链接到另一个文件夹。

该脚本正确地符号链接子目录及其内容:

#!/bin/bash

inotifywait -r -m '/source_dir' -e create -e moved_to |
    while read dir action file; do
 cp -as $dir/$file /destination_dir/$file
done

但是,问题是,如果将文件添加到子目录,将直接在目标目录而不是其各自的子目录中创建符号链接,我该如何纠正这个问题?

答案1

您需要使用目标目的地中的目录路径

#!/bin/bash
#
src='/source_dir'
dst='/destination_dir'

inotifywait -r -m "$src" --format '%w%f' -e CREATE,MOVED_TO |
    while IFS= read -r item
    do
        # echo "Got $item"
        if [[ ! -d "$item" ]]
        then
            echo mkdir -p "${item%/*}"
            echo cp -as "$item" "$dst/${item#$src/}"
        fi
    done

echo当您对它的功能符合您的预期感到满意时,请删除这两个前缀。取消注释echo "Got $item"以查看发生的一些情况。

请注意,不可能以inotifywait这种方式使用来处理包含换行符的文件或目录名(添加\000或什至添加\001--format字符串,无论有或没有$'...'似乎都根本无法inotifywait提供任何状态更新)。

相关内容