我需要一个 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
提供任何状态更新)。