.tar 파일로 추출하기에 적합한 tar 파일을 만들고 싶습니다 /
. 파일 시스템의 루트를 나타내고 아래의 tar에 포함하려는 모든 항목(예: ) etc/rc.d/init.d/glassfish3
과 opt/glassfish3/...
기타 디렉터리 및 파일을 포함하는 작업 디렉터리를 만들었습니다 opt/...
.
이렇게 하면 tar 파일에 tar zcvpf files.tgz *
중간 디렉터리(예 etc
: , 및 )가 포함됩니다 etc/rc.d
. opt
그런 다음 다른 시스템으로 추출하면 /
제대로 작동하지 않아 해당 디렉토리의 소유권과 권한이 손상됩니다. 나는 정말로 그들을 내버려두고 만지지 않고 싶었습니다.
그래서 저는 이 문제에 대한 좋은 해결책을 찾았다고 생각합니다.
find . -type f -print0 | tar zcvpf files.tgz --null --files-from -
파일만 포함하는 tar를 생성합니다. 이것은 굉장합니다. 내가 넣은 파일만 가져옵니다... 다만 다음과 같은 중요한 리프 디렉터리는 가져오지 않는다는 것을 발견했습니다.
opt/glassfish3/glassfish/lib/asadmin
이것은 빈 디렉토리입니다(Glassfish3에서는 이를 요구하며, 그렇지 않으면 불평할 것입니다).
중간 디렉터리는 건너뛰고 최종 디렉터리는 건너뛰지 않는 tar 파일을 만드는 방법은 무엇입니까?find+awk 마법이 도움이 될 것 같은 느낌이 듭니다. 그러나 한 줄씩 작성할 필요는 없으며 가독성이 중요합니다. 감사해요.
편집하다: 나는 이것을 찾았다. 기타/더 나은 아이디어 환영:
cat <(find . -type f -print0) <(find . -type d -empty -print0) | tar zcvpf files.tgz --null --files-from -
답변1
find
'OR'이 가능하므로 -o
다음과 같이 두 명령을 결합할 수 있습니다.find
find . \( -type f -o -type d -empty \) -print0 | tar ...
또는 모든 파일을 하나의 명령줄에 배치할 수 있다고 보장할 수 있는 경우
find . \( -type f -o -type d -empty \) -exec tar cvfz files.tgz {} +