파일이 아닌 폴더 만 복사 하시겠습니까? 수동으로 폴더를

전체 디렉토리를 복사하고 폴더 만 복사하는 방법이 있습니까? 내 디렉토리 어딘가에 손상된 파일이있어 하드 디스크가 고장납니다.

따라서 손상된 파일을 다른 하드 디스크에 복사하는 대신 수백 개의 폴더를 검색하는 스크립트가 있으므로 수동으로 폴더를 모두 만들고 싶지 않기 때문에 폴더 만 복사하고 싶었습니다.

cp 설명서를 검색했지만 아무것도 볼 수 없습니다 (보고 싶을 수도 있습니다)

고장난 HDD에이 구조가 있다고 가정 해보십시오.

dir1
    files
    dir2
        files
        files
        dir4
dir3
files

내가 원하는 것은 파일이 아닌 디렉토리 구조입니다.

그래서 나는 새로운 HDD로 끝날 것입니다 :

dir1
    dir2
        dir4
dir3

누군가가 속임수를 알고 싶어!



답변

디렉토리 스켈레톤을 미러하고 파일을 복사하지 않으려면 다음을 수행하십시오.

find -type d -links 2 -exec mkdir -p "/path/to/backup/{}" \;

무슨 일이야?

전화가 많이 find -type d -exec mkdir -p "/path/to/backup/{}" \;걸리기 때문에 이와 같이하지 않았습니다 mkdir. 약간의 테스트로이를 신속하게 증명할 수 있습니다. 다음은 테스트 트리와 두 명령을 비교하기 위해 실행 한 것입니다.

$ tree
.
├── dir1
│   ├── dir2
│   │   └── dir3
│   ├── dir7
│   └── dir8
└── dir9
    └── dir0

$ pr -m -t <(find -type d) <(find -type d -links 2)
.                               ./dir1/dir8
./dir1                          ./dir1/dir2/dir3
./dir1/dir8                     ./dir1/dir7
./dir1/dir2                     ./dir9/dir0
./dir1/dir2/dir3
./dir1/dir7
./dir9
./dir9/dir0

그리고 그것은 수천 개의 디렉토리를 가진 실제 솔루션에서만 나아질 것입니다.


답변

파이썬 원 라이너로 매우 쉽게 수행 할 수 있습니다.

bash-4.3$ tree
.
├── ABC
├── set_pathname_icon.py
├── subdir1
│   ├── file1.abc
│   └── file2.abc
├── subdir2
│   ├── file1.abc
│   └── file2.abc
└── subdir3
    └── subdir4
        └── file1.txt

4 directories, 7 files
bash-4.3$ python -c 'import os,sys;dirs=[ r for r,s,f in os.walk(".") if r != "."];[os.makedirs(os.path.join(sys.argv[1],i)) for i in dirs]' ~/new_destination
bash-4.3$ tree ~/new_destination
/home/xieerqi/new_destination
├── subdir1
├── subdir2
└── subdir3
    └── subdir4

스크립트로 다음과 같이 다시 작성할 수 있습니다.

#!/usr/bin/env python
import os,sys
dirs=[ r for r,s,f in os.walk(".") if r != "."]
for i in dirs:
    os.makedirs(os.path.join(sys.argv[1],i))