"cp"를 사용하여 디렉토리의 여러 복사본을 만드는 방법은 무엇입니까?

"cp"를 사용하여 디렉토리의 여러 복사본을 만드는 방법은 무엇입니까?

저는 Debian GNU/Linux를 사용하고 있습니다.

다음 명령을 실행했습니다.

mkdir code

cp -Rf code code{1..255}

첫 번째 cmd는 다음과 같은 디렉터리를 만듭니다.암호.
두 번째 명령의 목적은 이름이 지정된 폴더를 복사하는 것입니다.암호도착하다코드 1-코드 255'

그 목적은 폴더 코드를 255번 복사하는 것입니다.
대신 다음과 같이 말합니다.

cp: target 'code255' is not a directory...

왜 이것이 작동하지 않습니까? ? ?

touch file{1..255} works fine!

그래서 왜 안돼 cp?

해결책은 무엇입니까?

=(

답변1

이 명령의 구문은 다음 cp과 같습니다.

cp [options] file copy-of-file

또는

cp [options] file1 file2... directory-to-copy-files-into

즉, 다음이 될 수 있습니다.에게 복사또는에게 복사.

위의 첫 번째 개요에서는 둘 중 하나일 수 있습니다. 그것이 무엇인지는 copy-of-file그것이 이미 존재하는지, 디렉토리(또는 디렉토리에 대한 심볼릭 링크)인지에 따라 달라집니다.에게 복사아니면 그렇지 않은 경우입니다.에게 복사1.

두 번째 요약은 항상에게 복사. directory-to-copy-files-into존재하지 않거나 디렉터리가 아닌 경우 오류 메시지가 표시됩니다.

귀하의 경우 쉘이 확장됩니다.

cp -Rf code code{1..255}

도착하다:

cp -Rf code code1 code2 ... code255

그렇다면 당신은 두 번째 상황에 속합니다.에게 복사code255, , ..., 파일을 복사할 수 있는 디렉토리가 아닌 것으로 나타나 오류가 발생합니다 cp.codecodecode254

어떤 경우에도 cp파일의 여러 복사본이 만들어지지 않습니다. 여기에서는 cp루프 등을 사용하여 만들고 싶은 각 복사본을 호출해야 합니다 .

zsh쉘 사용 ( {1..255}이 구문의 소스):

for f (code{1..255}) cp -R code $f

또는 bash쉘을 사용하면(이 {1..255}연산자 복사) 데비안의 기본 사용자 대화형 쉘이므로 아마도 이것을 사용하고 있을 것입니다:

for f in code{1..255}; do cp -R code "$f"; done

다른 옵션에는 다음이 포함됩니다 xargs.

seq 255 | xargs -I{} cp -R code code{}

또는 POSIXly(최신 sh구현에서):

i=1; while [ "$i" -le 255 ]; do cp -R code "code$i"; i=$((i + 1)); done

1, 하나에게 복사cp file dir/시행은 with 또는 with 의 GNU 구현을 통해 수행될 수 있습니다 . ㅏcpcp -t dir file에게 복사GNU를 통해 cp시행 가능cp -T file copy-of-file

관련 정보