find & cp 명령은 첫 번째 수준 디렉터리를 복사하지 않습니다.

find & cp 명령은 첫 번째 수준 디렉터리를 복사하지 않습니다.

다음과 같은 디렉토리 구조가 있습니다.

test folders
├── 1
│   ├── 1-1
│   ├── 1-2
│   └── 1-3
├── 2
│   ├── 2-1
│   ├── 2-2
│   └── 2-3
├── 3
│   ├── 3-1
│   ├── 3-2
│   └── 3-3
└── 4
    ├── 4-1
    ├── 4-2
    └── 4-3

16 directories, 0 files

find & cp 명령을 사용하여 모든 하위 폴더를 제외하고 첫 번째 수준 폴더인 1,2,3,4만 복사하려고 합니다.

├── 1
├── 2
├── 3
└── 4

작업 디렉터리는 "/home/username/Downloads/test 폴더"입니다.

나는 사용했다

username@username-desktop:~/Downloads/test folders$ find . -maxdepth 1 -type d

출력은 다음과 같습니다

.
./2
./3
./4
./1

명령의 첫 번째 부분을 cp:와 결합하면 find . -maxdepth 1 -type d -exec cp -p -v "{}" "/home/username/Downloads/results" \;결과는 다음과 같습니다.

username@username-desktop:~/Downloads/test folders$ find . -maxdepth 1 -type d -exec cp -p -v "{}" "/home/username/Downloads/results" \;
cp: -r not specified; omitting directory '.'
cp: -r not specified; omitting directory './2'
cp: -r not specified; omitting directory './3'
cp: -r not specified; omitting directory './4'
cp: -r not specified; omitting directory './1'

그런 다음 위 명령에 -r 스위치를 추가했습니다.

username@username-desktop:~/Downloads/test folders$ find . -maxdepth 1 -type d -exec cp -p -r -v "{}" "/home/username/Downloads/results" \;
'./1' -> '/home/username/Downloads/results/./1'
'./1/1-1' -> '/home/username/Downloads/results/./1/1-1'
'./1/1-2' -> '/home/username/Downloads/results/./1/1-2'
'./1/1-3' -> '/home/username/Downloads/results/./1/1-3'
'./2' -> '/home/username/Downloads/results/./2'
'./2/2-1' -> '/home/username/Downloads/results/./2/2-1'
'./2/2-2' -> '/home/username/Downloads/results/./2/2-2'
'./2/2-3' -> '/home/username/Downloads/results/./2/2-3'
'./3' -> '/home/username/Downloads/results/./3'
'./3/3-1' -> '/home/username/Downloads/results/./3/3-1'
'./3/3-2' -> '/home/username/Downloads/results/./3/3-2'
'./3/3-3' -> '/home/username/Downloads/results/./3/3-3'
'./4' -> '/home/username/Downloads/results/./4'
'./4/4-1' -> '/home/username/Downloads/results/./4/4-1'
'./4/4-2' -> '/home/username/Downloads/results/./4/4-2'
'./4/4-3' -> '/home/username/Downloads/results/./4/4-3'

이제 결과 폴더에는 다음이 포함됩니다.

results
├── 1
│   ├── 1-1
│   ├── 1-2
│   └── 1-3
├── 2
│   ├── 2-1
│   ├── 2-2
│   └── 2-3
├── 3
│   ├── 3-1
│   ├── 3-2
│   └── 3-3
└── 4
    ├── 4-1
    ├── 4-2
    └── 4-3

모든 하위 폴더를 어떻게 복사합니까? -r을 포함했지만 find 명령의 시작 부분부터 -maxlength 1도 포함했습니다. 왜 이런 일이 발생하는지 어떻게 이해할 수 있습니까?

[편집] 여기에 연결된 후속 질문:cp를 사용하여 다양한 수준의 하위 디렉터리를 제외하는 방법은 무엇입니까?

답변1

-maxdepth 1지시 사항입니다 find. 그 때문에 당신의 의지는 find그것을 향해 달려갈 것이지만, 그것을 향해 달려가지는 않을 것입니다. 먼저 실행된다는 점에 유의하세요.cp …./1cp …./1/1-1cp ….

find당신이 달릴 때 cp -p -r -v . /home/username/Downloads/results, cp상관하지 마십시오 -maxdepth 1.자체 인수만 볼 수 있습니다.그리고 이 정확한 명령 ./1/1-1-r.

이거 봐요:-exec옵션 에 대해 알아보기find. 독립 실행형 명령을 작성하고 실행하는 데는 마법이 없습니다 find -exec.

관련 정보