디렉터리를 모니터링하고 새로 생성된 모든 하위 디렉터리와 해당 파일을 심볼릭 링크하는 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

관련 정보