
다음과 같은 폴더의 하위 폴더 4개에 동일한 이름의 파일이 있습니다 build
.
- 출시-iphoneos
- 릴리스 아이폰 시뮬레이터
- 디버그 아이폰
- 디버그 아이폰 시뮬레이터
sdk
이 파일을 명령줄에서 폴더의 동일한 디렉터리 구조에 복사하고 싶지만 스크립트를 사용하지 않고 싶습니다.
제가 할 수 있어야 한다고 생각한 것은 다음과 같습니다.
for C in (release debug); for T in (iphoneos iphonesimulator); cp build/$C-$T/*.a sdk/$C-$T
하지만 저는 Linux 사용자가 아니기 때문에 루프를 찾아본 후에도 작동하도록 할 수 없습니다. 한 줄로 꽤 쉽게 할 수 있습니까?
답변1
귀하의 접근 방식에는 몇 가지 문제가 있습니다.
(A B)
배열 할당(예: )에만 사용할 수C=(A B)
있으며 즉시 생성할 수는 없습니다.하지만,~을 위한배열이 필요하지 않으므로
for C in A B
잘 작동합니다.for
루프 의 올바른 구문 은 입니다for ... in ...; do ..., done
.
이 명령은 정상적으로 작동합니다.
for C in release debug; do for T in iphoneos iphonesimulator; do cp build/$C-$T/*.a sdk/$C-$T; done; done
이를 위해서는 적절한 폴더가 필요합니다.SDK이미 존재하는 것.
그러나 @Robertof가 이미 보여주었듯이 루프 없이 이를 보관하는 방법이 있습니다.
복사하고 싶다면모두디렉터리에서 파일을 검색하는 경우(즉, *.a
모든 항목과 일치) 해당 명령을 사용하거나 다음과 같이 약간 단순화할 수 있습니다.
cp -R build/{release,debug}-iphone{os,simulator} sdk
작동 방식:
쉘이 수행됩니다버팀대 확장이므로 실제로 실행될 명령은 다음과 같습니다.
cp -r build/release-iphoneos build/release-iphonesimulator build/debug-iphoneos build/debug-iphonesimulator sdk
스위치
-r
는CP재귀적입니다. 즉, 파일만 복사하는 것이 아니라 전체 디렉터리를 복사합니다.
`만 복사하려면.ㅏ파일(즉, 다른 파일도 있음)이 있으면 다음 명령을 사용하는 것이 좋습니다.
cd build
cp --parents {release,debug}-iphone{os,simulator}/*.a ../sdk
작동 방식:
이번에도 가새 확장은 이전과 같이 수행됩니다.
스위치
--parents
는CP대상에 대한 전체 소스 파일 이름을 사용하십시오. 즉, 의 파일이release-iphoneos
에 복사됩니다../sdk/release-iphoneos
.
마지막으로 조언 한마디:
실험할 때CP명령을 내릴 때는 항상 -i
스위치를 사용하세요. 그것은 만든다CP대화형입니다. 즉, 무엇이든 덮어쓰기 전에 메시지가 표시됩니다.
답변2
노력하다:
cp -R build/{release-iphoneos,release-iphonesimulator,debug-iphoneos,debug-iphonesimulator} sdk/