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