디렉토리의 모든 파일을 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