find와 cp 명령어를 조합해서 특정 폴더를 제외하고 원본 디렉터리 구조의 일부만 유지하려면 --parents 옵션 대신 rsync 또는 find와 함께 상대 경로를 활용해야 합니다.
방법 1: rsync 사용
rsync는 기본적으로 디렉터리 구조를 유지하며 복사를 수행하므로 가장 간단한 방법입니다.
rsync -av --exclude='csrc' --exclude='simv.daidir' /home/RTL/ ./RTL/
- 옵션 설명:
-a: 원본 파일의 권한과 시간 정보를 유지.-v: 진행 상황을 출력.--exclude='csrc': 이름이csrc인 폴더 제외.--exclude='simv.daidir': 이름이simv.daidir인 폴더 제외./home/RTL/: 원본 디렉터리../RTL/: 현재 경로에RTL디렉터리를 생성하며 복사.
방법 2: find와 상대 경로로 해결
find 명령어에서 상대 경로를 사용하여 불필요한 상위 디렉터리를 제거할 수 있습니다.
cd /home/RTL
find . -type d ! -name 'csrc' ! -name 'simv.daidir' -exec cp -r --parents {} /target/path/RTL/ \;
- 작동 원리:
cd명령어를 사용해/home/RTL디렉터리로 이동.find .: 현재 디렉터리(.)부터 시작해 검색.! -name 'csrc':csrc폴더 제외.! -name 'simv.daidir':simv.daidir폴더 제외.--parents: 디렉터리 구조를 복사하되, 상위 디렉터리는 포함되지 않음./target/path/RTL/: 결과가 저장될 대상 경로.
방법 3: find와 tar로 복사
find와 tar을 조합해 특정 폴더를 제외한 압축 후 복사도 가능합니다.
cd /home/RTL
tar --exclude='./csrc' --exclude='./simv.daidir' -cf - . | (cd /target/path/RTL && tar -xf -)
- 작동 원리:
tar --exclude:csrc및simv.daidir폴더를 제외.-cf -: 데이터를 표준 출력으로 보냄.| (cd /target/path/RTL && tar -xf -): 대상 경로에서 압축 해제.
결론
- 가장 간단한 방법은
rsync를 사용하는 것입니다. find로 작업하려면 상대 경로를 사용해 복사해야 원하지 않는 경로가 포함되지 않습니다.
필요한 방식을 선택하여 사용하세요.😊
'IT > 리눅스' 카테고리의 다른 글
| 쉡 스크립트 if []; then 에 등장하는 세미콜론의 의미? (0) | 2025.01.09 |
|---|---|
| 쉡 스크립트에서 환경변수 값 비교시 null, empty 체크를 위한 팁 (0) | 2025.01.09 |
| 현재 Shell 정보 확인하기 (0) | 2024.11.28 |
| vi - gf 로 파일열기시 환경변수 있어도 가능하게 (0) | 2024.08.28 |
| 윈도우에서 리눅스로 파일 이동시 ^M 문자 제거 방법 (0) | 2024.08.28 |