특정 상위 디렉터리를 제외하고 특정 하위 디렉터리를 포함하는 백업 스크립트

특정 상위 디렉터리를 제외하고 특정 하위 디렉터리를 포함하는 백업 스크립트

어떤 백업을 하고 싶나요?

  1. ,,, 가 포함된 사용자 홈 디렉터리를 Desktop각 사용자별로 백업해야 합니다.DocumentsPicturesthunderbird
  2. /home모든 사용자는 각자의 사용자 이름을 가진 파티션 에 있습니다.
  3. /home제외해야 할 특정 사용자와 파일이 있습니다.

나는 지금까지 무엇을 시도했는가?

$ tar cvf home01 -T include /home  

노트:T는 파일에 언급된 내용만 취하지만 작동하지 않음을 의미합니다.

$ find . \( -name \*Desktop -o -name \*Documents\* -o -name \*Pictures\*  -o -name \.thunderbird\*   \)  |
  xargs  tar zcvf /opt/rnd/home-$(date +%d%m%y).tar.zip 

노트:멘션 디렉터리를 백업하지만 각 사용자의 디렉터리를 폴더에 넣습니다.

예를 들어

$ ls -l /home

/home/user1/{Desktop,Documents,Pictures,.thunderbird}
/home/user2/{Desktop,Documents,Pictures,.thunderbird}
/home/user3/{Desktop,Documents,Pictures,.thunderbird}
/home/user4/{Desktop,Documents,Pictures,.thunderbird}
/home/user5/{Desktop,Documents,Pictures,.thunderbird}

홈 디렉토리 백업을 수행하고 해당 항목에서 제외 user1하면 됩니다 .user2user3user4user5

답변1

거의 다 왔어요! 이렇게 해야 합니다:

tar zcvf /opt/rnd/home-$(date +%d%m%y).tar.zip */{Desktop,Documents,Pictures,.thunderbird} --exclude=user4 --exclude=user5

답변2

명령 사용법을 보존하는 방법은 다음과 같습니다 find.

$ find . \( -type d -path */Desktop -o -path */.thunderbird -o -path */Pictures \\) \! -path '*user[45]*' -prune | xargs  tar zcvf /opt/rnd/home-$(date +%d%m%y).tar.gz

더 간단한 버전은 다음과 같습니다.

$ find . \( -type d                                                   \
     -path */Desktop -o -path */.thunderbird -o -path */Pictures \)   \
     \! -path '*user[45]*' -prune                                     \
  | xargs  tar zcvf /opt/rnd/home-$(date +%d%m%y).tar.gz

그러면 이름이 첫 번째 대괄호 블록에 있는 모든 디렉토리를 찾습니다 \( ... \). 디렉토리는 다음과 같습니다.

  • */Desktop
  • */thunderbird
  • */Pictures

두 번째 부분은 패턴과 일치하는 모든 경로를 제외합니다 *user[45]*. 이러한 항목은 목록에서 제거되었습니다. 마지막으로 결과 디렉토리 목록을 tar에 전달합니다.

기타 고려해야 할 사항

위는아니요방탄. 해당 문자열을 포함 user4하거나 user5그 안에 포함된 경로는 제외됩니다 . 또한 명령으로 빌드하는 것이 무엇이든 파일 이름의 공백을 처리할 수 있는지 확인하십시오.

관련 정보