다음과 같은 디렉토리 구조가 있습니다.
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 …
./1
cp …
./1/1-1
cp …
.
find
당신이 달릴 때 cp -p -r -v . /home/username/Downloads/results
, cp
상관하지 마십시오 -maxdepth 1
.자체 인수만 볼 수 있습니다.그리고 이 정확한 명령 ./1/1-1
은 -r
.
이거 봐요:-exec
옵션 에 대해 알아보기find
. 독립 실행형 명령을 작성하고 실행하는 데는 마법이 없습니다 find -exec
.