for 루프를 사용하여 복사하는 방법은 무엇입니까? [복사]

for 루프를 사용하여 복사하는 방법은 무엇입니까? [복사]

for d in ./*/ ; do (cd "$d" && cp -R ../lib . ); done 저는 이것을 쉘 스크립트에서 사용하여 상위 디렉토리 내의 모든 하위 폴더에 있는 lib 폴더를 복사합니다. 그러나 lib 폴더도 lib에 복사됩니다. 이 상황을 피하는 방법은 무엇입니까?

답변1

아니요 extglob:

for d in */ ; do
    if [ "$d" != "lib/" ]; then
        cp -R lib "$d"
    fi
done

아니면 사후에 삭제하세요... (물론, lib/lib사전에 존재하지 않는 이상!)

for d in */; do cp -R lib "$d"; done
rm -r lib/lib

(GNU cp가 그렇게 말하는 것은 좀 웃기지 cp: cannot copy a directory, 'lib', into itself, 'lib/lib'만 어쨌든 그렇게 합니다.)

답변2

일방 통행:

shopt -s extglob
for d in ./!(lib)/; do #...

또는 일치하지 않도록 밖으로 이동하십시오.

mv lib ../ #better not have a conflicting ../lib directory there
for d in */; do cp -R ../lib "$d"; done

답변3

옵션 없이 ls 명령을 사용하십시오.

for d in $(ls -I lib -1 */) ; do cp -R lib "$d" ; done

관련 정보