왜 이런 일이 발생하는지 설명할 수 있나요?
가장 구체적으로 말하면, 1의 내용이 f에 복사되는 이유는 무엇입니까? f가 g에 복사되는 이유는 무엇입니까?
$ tree
.
0 directories, 0 files
$ mkdir 1
$ mkdir 2
$ touch 1/a
$ touch 1/b
$ mkdir 1/c
$ touch 1/c/x
$ tree
.
├── 1
│ ├── a
│ ├── b
│ └── c
│ └── x
└── 2
3 directories, 3 files
$ cp -r 1/* 2/*
zsh: no matches found: 2/*
$ cp -r 1/* 2/*
$ mkdir 2/f
$ mkdir 2/g
$ cp -r 1/* 2/*
$ tree
.
├── 1
│ ├── a
│ ├── b
│ └── c
│ └── x
└── 2
├── f
└── g
├── a
├── b
├── c
│ └── x
└── f
7 directories, 6 files
답변1
의 경우 cp
target은 명령줄의 마지막 인수입니다. 2/g
마지막 매개변수로 지정했습니다 .
cp
실행하기 전에 명령 매개변수가 확장됩니다. 1/*
Expand to 1/a 1/b 1/c
.Expand 2/*
to 2/f 2/g
.실행된 마지막 명령은 cp -r 1/a 1/b 1/c 2/f 2/g
모든 인수(마지막 인수 제외)를 에 복사하는 것 입니다 2/g
.
콘텐츠를 에 복사하려는 경우 2
두 번째 glob이 필요하지 않으며 cp -r 1/* 2/
. 콘텐츠를 여러 대상에 복사하려는 경우 cp
;로만 지정할 수는 없습니다. 다음과 같은 작은 루프를 사용할 수 있습니다.
#!/bin/sh
for path in ./2/*/; do
cp -r 1/* "$path"
done