TARGET DIR의 파일과 디렉토리를 반복하고 DESTINATION의 모든 디렉토리에 대한 심볼릭 링크를 작성하는 bash 스크립트를 작성했습니다 DIR. 스크립트는 작동하지만 ln 명령은 내가 말할 수있는 것보다> 0의 종료 코드를 제공하므로 적절한 성공 메시지가 인쇄되지 않습니다.ln -s 명령을 실행하는 bash 스크립트가 종료시에 오류 코드를 받고 있지만 심볼 링크가 성공적으로 생성되고 있습니다.
: HERE[email protected]:/home/dog⟫ ls -la
total 8
drwxr-xr-x 2 obi obi 4096 Dec 24 11:13 .
drwxr-xr-x 8 obi obi 4096 Dec 24 10:32 ..
적지 하위 디렉토리 HERE
[email protected]:/home/dog⟫ ls /home/bud
bzfs.conf Downloads Music Templates VirtualBox VMs
Desktop examples.desktop Pictures vboxen vmz
Documents lab Public Videos
되는 출력 그것을 실행할 때 WITH 대상 디렉토리이다 HERE
스크립트를 실행하기 전에 목적지 디렉토리 인[email protected]:/home/dog⟫ /home/obi/scripts/dirlink.sh
/home/bud/Desktop failed to link to /home/dog/Desktop
/home/bud/Documents failed to link to /home/dog/Documents
/home/bud/Downloads failed to link to /home/dog/Downloads
/home/bud/lab failed to link to /home/dog/lab
/home/bud/Music failed to link to /home/dog/Music
/home/bud/Pictures failed to link to /home/dog/Pictures
/home/bud/Public failed to link to /home/dog/Public
/home/bud/Templates failed to link to /home/dog/Templates
/home/bud/vboxen failed to link to /home/dog/vboxen
/home/bud/Videos failed to link to /home/dog/Videos
/home/bud/VirtualBox VMs failed to link to /home/dog/VirtualBox VMs
/home/bud/vmz failed to link to /home/dog/vmz
추가 된 스크립트는 SYMLINKS가 추가 된 후 실행됩니다. 여기
[email protected]:/home/dog⟫ ls -la
total 8
drwxr-xr-x 2 obi obi 4096 Dec 24 11:13 .
drwxr-xr-x 8 obi obi 4096 Dec 24 10:32 ..
lrwxrwxrwx 1 obi obi 17 Dec 24 11:13 Desktop -> /home/bud/Desktop
lrwxrwxrwx 1 obi obi 19 Dec 24 11:13 Documents -> /home/bud/Documents
lrwxrwxrwx 1 obi obi 19 Dec 24 11:13 Downloads -> /home/bud/Downloads
lrwxrwxrwx 1 obi obi 13 Dec 24 11:13 lab -> /home/bud/lab
lrwxrwxrwx 1 obi obi 15 Dec 24 11:13 Music -> /home/bud/Music
lrwxrwxrwx 1 obi obi 18 Dec 24 11:13 Pictures -> /home/bud/Pictures
lrwxrwxrwx 1 obi obi 16 Dec 24 11:13 Public -> /home/bud/Public
lrwxrwxrwx 1 obi obi 19 Dec 24 11:13 Templates -> /home/bud/Templates
lrwxrwxrwx 1 obi obi 16 Dec 24 11:13 vboxen -> /home/bud/vboxen
lrwxrwxrwx 1 obi obi 16 Dec 24 11:13 Videos -> /home/bud/Videos
lrwxrwxrwx 1 obi obi 24 Dec 24 11:13 VirtualBox VMs -> /home/bud/VirtualBox VMs
lrwxrwxrwx 1 obi obi 13 Dec 24 11:13 vmz -> /home/bud/vmz
는 스크립트 자체입니다 :
#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
TARDIR="/home/bud"
DESTDIR="/home/dog"
if [ ! -d $TARDIR ]; then
printf "$TARDIR does not exist!\n"
exit
fi
if [ ! -d $DESTDIR ]; then
printf "$DESTDIR does not exist!\n"
exit
fi
TARDIR="$TARDIR/*"
for DIR in $TARDIR; do
if [ -d $DIR ]; then
printf "$DIR"
TARG="$DESTDIR/$(basename "$DIR")"
if [ $(ln -s "$DIR" "$TARG") ]; then
printf " ==> $TARG\n"
else
printf " failed to link to $TARG\n"
fi
fi
done
IFS=$SAVEIFS
그래서, 결론은 스크립트가 작동하지만, [$은 (LN -s "$ DIR" "$ TARG은")] 0을 반환해야합니다 과의 printf "==> $의 TARG \ 없음"라인은 성공 메시지를 인쇄해야하지만, 대신에, 나는에 실패 하다며 링크 "를 얻을 대상 디렉토리가 비어있는 경우에도 메시지.
모든 아이디어/제안?
감사합니다.
bash는 [ANSI-C quoting] (https://www.gnu.org/software/bash/manual/bashref.html#ANSI_002dC-Quoting)이 있으므로'IFS = $ '\ n \ b'' 서브 쉘을 만들 필요없이 –
또한'$ DIR'에 공백이나 와일드 카드 문자가 포함되어 있는지 알 수 없으므로 괄호 안에 넣으십시오 :'[-d "$ DIR"] '- bash에서 단어 분리와 파일명 확장의 대상이 아닌 * double * bracket의 변수입니다. –
팁 주셔서 감사합니다. 나는 둘 다 추가했다. – obitori