디렉토리 트리를 찾고, 삭제하고, 심볼릭 링크하도록 bash 스크립트를 개선합니다.

디렉토리 트리를 찾고, 삭제하고, 심볼릭 링크하도록 bash 스크립트를 개선합니다.

한동안 사용해온 이 스크립트가 기본적으로 작동하지만 수정하는 데 도움이 필요한 몇 가지 문제가 있습니다.

목표는 외부 마운트 지점을 살펴보고, 일치하는 소스 디렉터리가 있는지 확인하고, 그렇다면 소스를 삭제하고 외부에서 소스가 있는 빈 위치로 심볼릭 링크를 만드는 것입니다.

물론 동일한 작업을 수행하는 더 나은 방법에 대한 제안은 환영받을 것입니다.

첫 번째이자 가장 중요한 문제는 일부 디렉토리가 잊혀진다는 것입니다. 살펴보니 특별한 패턴은 보이지 않습니다. 많은 경우 {}에 다른 특수 문자가 있는데 이것이 주된 이유일 수 있지만 일부는 매우 일반적이고 특수 문자가 없습니다.

둘째, 내 스크립트는 파일을 고려하지 않으며 디렉토리가 필요합니다.

구조는 다음과 같습니다.

19823798/Test1 (789) - {456} [123]
8765862/Test2 {123} - (456) [789]
345345/Test2-ünicode (456) - {789} [123]
308/unexpected.file

내 스크립트는 다음과 같습니다

#!/bin/bash
set -e
src_dir="/var/tank"
dest_dir="/mnt/tank"
nums_and_names=$(find "$src_dir" -mindepth 2 -maxdepth 2 -type d -regextype grep -regex ".*/[0-9]\{1,10\}/.*" -printf '%P\n')
while read -r named; do
        echo "dest_dir is "${dest_dir}/$named""
        echo "find output is $named"
        [ -d "${dest_dir}/$named" ] && echo ""${dest_dir}/$named" exists!" || exit 0
        rm -rf -- "${src_dir}/$named"
        ln -s -- "${dest_dir}/$named" "${src_dir}/$named"
done <<< "$nums_and_names"
echo "all finished"

관련 정보