Bash에서 문자열을 사용하여 for 루프를 실행하는 방법

Bash에서 문자열을 사용하여 for 루프를 실행하는 방법

루프를 문자열로 실행해야 합니다. 이것:

bash -c "for l in $(/bin/ls /dir1); do /bin/ln -sf $l /dir2/; done"

오류가 발생합니다.

/bin/bash: -c: line 1: syntax error near unexpected token `file1'
/bin/bash: -c: line 1: `file1'

file1은 심볼릭 링크로 변환하려는 첫 번째 디렉터리의 파일 중 하나입니다.

답변1

ls 출력을 구문 분석하지 않고:http://mywiki.wooledge.org/ParsingLs.

또한 이 예에서는 루프가 필요하지 않으며 ln루프가 인수를 반복하도록 합니다. cd현재 디렉토리에서 상대 경로를 사용하여 상대 심볼릭 링크를 생성할 때 상대 심볼릭 링크 대상이 작동하도록 하려면 심볼릭 링크를 생성하려는 디렉토리로 이동합니다.

(cd /dir1 && ln -sf -- * /dir2)      # make broken symlinks in dir2
(cd /dir2 && ln -sf -- ../dir1/* .)  # make relative symlinks
ln -sf /dir1/* /dir2/                # make absolute symlinks

(subshell)현재 쉘에서 디렉토리가 변경되는 것을 방지합니다.

를 사용할 수도 있는데 , 이는 명령줄 끝에만 목록을 넣을 수 있기 때문에 ln -sf -t /dir2 -- *유용합니다 .find -exec ln -t /dir {} +find -exec {} +

GNU에는 cp하드/심볼릭 링크를 생성하는 옵션도 있습니다 -l.-s

관련 정보