심볼릭 링크를 생성하기 위한 스크립트를 작성하는 데 도움이 필요합니다. 다음은 제가 백그라운드에서 실행한 스크립트입니다.
#!/bin/bash
SOURCE="/home/$USER/www"
DEST="/var/www"
while true; do
find $SOURCE -maxdepth 1 -type d -not -name "old.**" -exec ln -s -- {} "$DEST"/{} \;
find $DEST -maxdepth 1 -type l -exec test ! -e {} \; -delete
sleep 30
done
이제 이 스크립트를 통해 몇 가지 작업을 더 수행하고 싶습니다.
- 이미 연결된 폴더와
'이전'이 포함된 폴더는 무시합니다. 접두사. $SOURCE에서 기본 폴더를 사용할 수 없는 경우 $DEST에서 기호 링크를 제거합니다.
이 스크립트에 해당 기능을 추가할 수 있도록 도와주세요. 감사해요.
답변1
이것이 예상한 것보다 더 번거로울 수 있다는 것을 알고 있지만 -exec ...
하나의 입력 매개변수(심볼릭 링크할 디렉터리 이름)를 가져오는 별도의 스크립트로 해당 부분을 다시 작성한 다음 심볼릭 링크가 이미 존재하는지(예: if [ -h "$DEST/$1" ] ...
) 확인하고 필요한 경우 , 올바른 위치로 확인되는지 여부(예 if [ $(readlink $DEST/$1) == $SOURCE/$1 ] ...
: 두 조건이 모두 true이면 파일을 건너뛰고, 그렇지 않으면 심볼릭 링크가 (다시) 생성됩니다.
그런 다음 exec 클래스에서 다음과 같이 이 스크립트를 호출합니다.
find $SOURCE -maxdepth 1 -type f -not -name "old.**" -exec make-symlink.sh {} \;
몇 가지 추가 사항:
find
대신 대체할 파일 이름{}
포함할 것이다$SOURCE
: 예를 들어 귀하의 경우 최종exec
명령은 다음과 같습니다ln -s -- /home/user/www/public /var/www/home/user/www/public
. 를 사용하여 이 문제를 해결하십시오basename
.일부 시스템(OS X)에서는 $SRC 디렉토리 자체가 디렉토리 찾기 목록에 포함됩니다
find
. 이것은 아마도 당신이 원하는 것이 아닐 것입니다. 출력 의 첫 번째 줄을 제거하거나 절을find
추가하여 이 문제를 해결하십시오-not -name $(basename $SOURCE)
.
도움이 되었기를 바랍니다.