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