보관 시 비어 있거나 숨겨진 파일 제외

보관 시 비어 있거나 숨겨진 파일 제외

다음을 사용하여 디렉토리의 아카이브를 생성해야 합니다.tar 쉘 스크립트에서하지만 숨겨진 파일과 크기가 0. 보관됩니다.

터미널에서 다음과 같은 매개변수를 보내려고 합니다.

/bin/bash ss1 /home/user arch /home/user/folder

그러나 그것은 나에게 약간의 tar 오류를 안겨주었습니다. 나는 다음과 같이 보관하려고합니다.

tar -cvf --exclude=.* $1/$2 $3 

그러나 이것은 올바르지 않으며 올바른 구문이 무엇인지, 빈 파일과 숨겨진 파일을 제외하는 방법을 잘 모르겠습니다.

답변1

당신이 이것을 태그했기 때문에 linux나는 당신이 GNU find와 GNU를 가지고 있다고 가정할 것입니다 tar.

파일 이름에 개행 문자가 포함되어 있지 않고 빈 디렉토리를 보관하고 싶지 않은 경우:

find "$3" -type f \! -empty \! -name '.*' | tar cvf "$1/$2" -T -

find해당 파일을 찾아서 보관할 파일 목록을 읽어오라고 -T -알려줍니다 .tarstdin

빈 디렉터리를 포함하려면 다음을 개선하세요.

find "$3" \( -type d -empty \) -o \( -type f \! -empty \! -name '.*' \) | \
    tar cvf "$1/$2" -T -

만약 너라면반품줄 바꿈이 포함된 파일 이름을 처리하고 싶습니다.

find "$3" \( \( -type d -empty \) -o \( -type f \! -empty \! -name '.*' \) \) -print0 | \
    tar cvf "$1/$2" --null -T -

답변2

이 시도:

find test/ -not -iname ".*" -not -empty -exec tar --no-recursion -rvf file.tar {} \;

유일한 문제는 빈 디렉토리가 포함되지 않는다는 것입니다. 하지만 어딘가에 해결 방법이 있을 것 같습니다...

관련 정보