tar 아카이브 생성 시 소켓 유형 파일을 제외하는 문제 찾기

tar 아카이브 생성 시 소켓 유형 파일을 제외하는 문제 찾기

디렉토리의 모든 파일을 tar 아카이브하려고 합니다 /var. 물론 여기서는 Unix 소켓을 제외하고 싶습니다.

그래서 다음과 같은 명령을 시도합니다.

sudo find /var \! -type s -exec tar -rf ~/test/etc.tar {} \;

하지만 중복된 오류 메시지가 발생합니다.

tar format cannot archive socket:

tar 대신 복사하려고 하면 비슷한 오류가 발생합니다.

cp: ./var/run/devd.pipe is a socket (not copied).

find소켓 유형의 파일을 제외할 수 없는 이유를 아는 사람이 있습니까 ? 예를 들어 디렉터리 유형 파일을 제외할 수 있습니다.

답변1

디렉터리도 제외해야 합니다. 디렉토리를 제외하지 않으면 인수로 (및 기타 디렉토리)를 tar가져오고 /var소켓 유무에 관계없이 이러한 디렉토리의 모든 내용을 아카이브하는 작업을 진행합니다. 또한 동일한 이유로( /var포함) /var/log/messages많은 파일의 여러 복사본을 추가합니다 /var/log.

find /var ! -type s ! -type d -exec tar -r -f archive.tar {} +

또는 일반 파일과 심볼릭 링크만 원하는 경우:

find /var '(' -type f -o -type l ')' -exec tar -r -f archive.tar {} +

한 번에 가능한 한 적은 수의 호출을 수행하고 가능한 한 많은 인수를 사용하기 를 원하기 때문에 여기서 -exec ... {} +대신 사용하기로 결정했습니다.-exec ... {} ';'tar

관련 정보