다음을 사용하여 디렉토리의 아카이브를 생성해야 합니다.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 -
알려줍니다 .tar
stdin
빈 디렉터리를 포함하려면 다음을 개선하세요.
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 {} \;
유일한 문제는 빈 디렉토리가 포함되지 않는다는 것입니다. 하지만 어딘가에 해결 방법이 있을 것 같습니다...