폴더를 재귀적으로 감시하고 각각의 새 파일과 하위 디렉터리를 다른 폴더에 심볼릭 링크하려면 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