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

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

다음을 사용하여 디렉토리의 아카이브를 생성해야 합니다.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 {} \;

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

관련 정보