Tarring-gzip은 숨겨진 디렉터리(또는 파일 + 디렉터리)만

Tarring-gzip은 숨겨진 디렉터리(또는 파일 + 디렉터리)만

기반으로이것, tar를 사용하여 현재 디렉터리의 모든 숨겨진 파일에 액세스할 수 있습니다.

ls -A | egrep '^\.' | tar cvf ./test.tar -T -

하지만 모든 숨겨진 디렉터리나 현재 디렉터리의 모든 숨겨진 디렉터리와 파일을 어떻게 tar할 수 있습니까?

기반으로이것, ls -ap | egrep "^\..*/$" | tar -zcvf hiddens.tar.gz -T -문제를 해결해야합니다. 그러나 그것은 진실이 아니다. 이 명령은 단순히 빈 tar.gz 아카이브를 생성합니다. 따라서 tar는 이 명령을 통해 어떤 디렉토리도 볼 수 없습니다.

답변1

쉘스크립트나 복잡한 명령줄에서는 ls결과를 예측할 수 없으므로 일반적으로 사용하지 않는 것이 좋습니다.

find현재 디렉터리가 홈 디렉터리인 경우 다음 명령이 ~작동합니다.

cd ~

이 명령은 숨겨진 파일만 가져옵니다.

LC_ALL=C find -mindepth 1 -maxdepth 1 -type f -name '.*' -print0 | tar --null -cvzf hidden-files.tar.gz -T -

이 명령은 숨겨진 디렉터리 트리(하위 디렉터리 및 파일 포함)만 "만" 가져옵니다.

LC_ALL=C find -mindepth 1 -maxdepth 1 -type d -name '.*' -print0 | tar --null -cvzf hidden-dirs.tar.gz -T -

디렉터리 트리에 기호 링크가 있으면 예기치 않은 결과가 발생할 수 있습니다.

답변2

에서 zsh모든 숨겨진 디렉터리(및 해당 내용)를 압축합니다.

tar zcf file.tar.gz .*(/)

(이 표준은 심볼릭 링크도 포함한다는 점에서 .*/zsh와 다르며 .*(/), 일부 tar구현 에서는 /glob 확장에 의해 생성된 경로에 추가되면 심볼릭 링크 대신 디렉토리(및 모든 내용)로 패키징되므로 그렇지 않을 수도 있습니다. 당신이 원하는 것, .그리고 많은 쉘에 대한 아래의 참고 사항 도 참조하십시오 ...

숨겨진 디렉터리와 일반 파일을 압축하려면:

tar zcf file.tar.gz .*(/,.)

유형(디렉토리, 일반, 심볼릭 링크, fifos...)에 관계없이 모든 숨겨진 파일을 압축합니다.

tar zcf file.tar.gz .*

이 쉘은 fish쉘, mksh 또는 Forsyth 쉘을 기반으로 하는 다른 쉘과 함께 사용할 수도 있지만 대부분의 다른 쉘에서는 사용할 수 없습니다. 이러한 다른 쉘은 glob의 확장을 포함 .하고 포함하기 때문입니다...

그러나 ksh93다음을 수행할 수 있습니다.

(FIGNORE='@(.|..)'; tar zcf file.tar.gz .*)

그리고 bash:

(shopt -s dotglob failglob; tar zcf file.tar.gz [.]*)

또는 bash 5.2 이상을 사용:

(shopt -s globskipdots failglob; tar zcf file.tar.gz .*)

( 전역 확장에서 globskipdots발생 .하고 결코 반환되지 않습니다. 이 옵션은 가지고 있거나 포함하는 것이 결코 유용하지 않기 ..때문에 항상 활성화하고 싶을 수 있습니다 )....

관련 정보