domains
이라는 이름의 폴더 가 있다고 가정합니다 glassfish
. 그것은 domain1
, domain2
....domainN
domain1
디렉토리의 모든 내용을 디렉토리 logs
에 저장하고 싶습니다 ./home/user/backup
수동으로 할 수도 있고,
cp -R /home/user/glassfish/domains/domain1 /home/user/backup
rm -rf /home/user/backup/domain1/logs
하지만 어떻게 하면 이 일을 더 쉽게 할 수 있을까요?
답변1
rsync
대신 사용할 수 있습니다 cp
. 기본적으로 제외 옵션이 있다는 점을 제외하면 로컬 간 복사와 동일합니다.
rsync --archive --exclude /logs /home/user/glassfish/domains/domain1 /home/user/backup
답변2
사용하지 않으려면 이 cp
명령을 사용하고 로그가 포함된 폴더를 제외 할 수 있습니다.!(excluded_folder)
rsync
tar
cp -var /home/user/glassfish/domains/domain1/!(/home/user/backup/domain1/logs) /home/user/backup
또는
cp -R /home/user/glassfish/domains/domain1/!(/home/user/backup/domain1/logs) /home/user/backup
더 많은 폴더를 제외하려면 |
다음과 같은 것을 사용할 수 있습니다.!(excluded_folder1|excluded_folder2|excluded_folder3)
셸이 확장된 패턴 일치를 지원하는지 확인하세요(예: extglob
이 옵션이 활성화된 Bash).
Bash 스크립트에서 사용하려면 다음을 수행하십시오.
#!/bin/bash
shopt -s extglob
cp -var /home/user/glassfish/domains/domain1/!(/home/user/backup/domain1/logs) /home/user/backup
다음과 같은 오류가 발생하는 경우!": event not found"
이 게시물을 확인하세요:
답변3
zip
다음을 사용하여 tar
아카이브 복사본을 만들 수 있습니다.
cd /home/user/glassfish/domains/domain1
tar --exclude="logs" cvf /home/user/backup/domain1.tar .
등. 또는 다음을 사용하여 zip
:
cd /home/user/glassfish/domains/domain1
zip /home/user/backup/domain1.zip -x logs/**\* .
이렇게 하면 날짜를 기준으로 아카이브 이름을 지정하여 기록 기록을 보관할 수 있습니다.
답변4
셸 구문을 사용할 수 없는 경우 다음 패턴을 사용 find
하고 전달할 수 있습니다.cpio
find SOURCE \( -depth 1 -name logs -prune \) -o \( -type f -print0 \) |
cpio -p -v -0 -d DESTINATION
다음 cpio
옵션이 더 흥미로울 수 있습니다(구현에서 지원하는 경우).
-a
,--reset-access-time
- 파일을 읽은 후 액세스 시간을 재설정합니다.
-m
,--preserve-modification-time
– 생성된 파일의 파일 수정 시간을 소스의 파일 수정 시간과 일치하도록 설정합니다.
--no-preserve-owner
– 파일 소유권을 복원하려고 시도하지 마십시오. 이는 루트가 아닌 사용자로 실행할 때의 기본 설정입니다.
-R [user][:][group]
,--owner [user][:][group]
– 출력에서 파일의 소유자 및/또는 그룹을 설정합니다. [...] 이 옵션은 슈퍼유저만 사용할 수 있습니다.
-u
,--unconditional
– 무조건 기존 파일을 덮어씁니다. 일반적으로 오래된 파일은 디스크의 새 파일을 덮어쓰지 않습니다.