이것은 내 원래 게시물에 대한 후속 질문입니다.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 folders
.
실패한 시도는 연결된 질문에 있습니다. 거기서 우리는 with 명령이 cp
visible 이라는 사실을 확인했습니다 .find
-maxdepth
파일을 더 쉽게 복사 할 find
수 있는 또 다른 명령이 있습니까 ? if 명령을 연결할 수 없는 것과 동일한 기능이 있습니까 ?cp
-maxdepth
-maxdepth
cp
find
cp
[편집]: 또한 첫 번째 수준 디렉터리인 1, 2, 3, 4만 복사하고 싶습니다. 파일을 복사하고 싶지 않습니다. 혼란을 드려 죄송합니다
답변1
파일이나 하위 디렉터리를 복사하지 않고 디렉터리만 복사하려는 경우 다음과 같이 쉽습니다.
terdon@oregano test folders $ tree
.
├── 1
│ ├── 1-1
│ ├── 1-2
│ ├── 1-3
│ ├── file-1
│ └── file-2
├── 2
│ ├── 2-1
│ ├── 2-2
│ ├── 2-3
│ ├── file-1
│ └── file-2
├── 3
│ ├── 3-1
│ ├── 3-2
│ ├── 3-3
│ ├── file-1
│ └── file-2
└── 4
├── 4-1
├── 4-2
├── 4-3
├── file-1
└── file-2
17 directories, 8 files
위의 예를 사용하면 다음 명령을 사용하여 최상위 디렉터리를 다시 만들 수 있습니다.
terdon@oregano test folders $ find . -maxdepth 1 -type d -exec mkdir ../results/{} \;
mkdir: cannot create directory ‘../results/.’: File exists
$ tree ../results/
../results/
├── 1
├── 2
├── 3
└── 4
5 directories, 0 files
이 오류 메시지는 무시해도 됩니다. 이는 .
현재 디렉터리 도 찾고 ../results/.
이미 존재하는 현재 디렉터리를 생성하려고 시도하기 때문입니다.
최상위 파일도 복사하려면 다음 두 단계로 수행할 수 있습니다.
terdon@oregano test folders $ find . -maxdepth 1 -type d -exec mkdir ../results/{} \;
mkdir: cannot create directory ‘../results/.’: File exists
$ find . -maxdepth 2 -type f -exec cp {} ../results/{} \;
다음을 생성합니다.
$ tree ../results/
../results/
├── 1
│ ├── file-1
│ └── file-2
├── 2
│ ├── file-1
│ └── file-2
├── 3
│ ├── file-1
│ └── file-2
└── 4
├── file-1
└── file-2
다음 방법을 통해 한 번에 이 작업을 수행할 수도 있습니다.
$ find . -maxdepth 1 -type d -exec sh -c 'mkdir ../results/$1 && cp {}/* ../results/$1' sh {} \;
mkdir: cannot create directory ‘../results/.’: File exists
cp: -r not specified; omitting directory './3/3-1'
cp: -r not specified; omitting directory './3/3-2'
cp: -r not specified; omitting directory './3/3-3'
cp: -r not specified; omitting directory './1/1-1'
cp: -r not specified; omitting directory './1/1-2'
cp: -r not specified; omitting directory './1/1-3'
cp: -r not specified; omitting directory './4/4-1'
cp: -r not specified; omitting directory './4/4-2'
cp: -r not specified; omitting directory './4/4-3'
cp: -r not specified; omitting directory './2/2-1'
cp: -r not specified; omitting directory './2/2-2'
cp: -r not specified; omitting directory './2/2-3'
cp
없이 사용하기 때문에 -r
파일만 복사됩니다. 이러한 경고가 표시되지만 무시해도 됩니다. 다음으로 리디렉션하여 음소거할 수도 있습니다 /dev/null
.
find . -maxdepth 1 -type d -exec sh -c 'mkdir ../results/$1 && cp {}/* ../results/$1' sh {} \; 2>/dev/null