전체 디렉토리를 복사하고 폴더 만 복사하는 방법이 있습니까? 내 디렉토리 어딘가에 손상된 파일이있어 하드 디스크가 고장납니다.
따라서 손상된 파일을 다른 하드 디스크에 복사하는 대신 수백 개의 폴더를 검색하는 스크립트가 있으므로 수동으로 폴더를 모두 만들고 싶지 않기 때문에 폴더 만 복사하고 싶었습니다.
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/{}" \;
무슨 일이야?
- 찾기는 디렉토리를 선택하는 것입니다
- 우리는 가능한 가장 깊은 디렉토리
-links 2
를 찾기 위해 사용 하고 있습니다 . mkdir -p
길을 따라 누락 된 디렉토리를 만듭니다.
전화가 많이 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))