tar 명령을 다음과 같이 사용합니다.
tar -cvf protTests.tar protTests/*
에 tar
폴더 내의 모든 파일 protTests
. 그러나 여기에는 원하는 폴더가 아닌 폴더 안에 기호 링크가 포함되어 있습니다.
모든 심볼릭 링크를 생략하는 명령 행 옵션이 있습니까?
tar 명령을 다음과 같이 사용합니다.
tar -cvf protTests.tar protTests/*
에 tar
폴더 내의 모든 파일 protTests
. 그러나 여기에는 원하는 폴더가 아닌 폴더 안에 기호 링크가 포함되어 있습니다.
모든 심볼릭 링크를 생략하는 명령 행 옵션이 있습니까?
답변:
심볼릭 링크 tar
파일을 protTests
제외한 모든 파일 목록 을 제공하기 위해이 작업을 수행 할 수 있습니다 .
find protTests -maxdepth 1 -mindepth 1 -not -type l -print0 |
tar --null --files-from - -cvf protTests.tar
그건 그렇고, 기존 명령 :
tar -cvf protTests.tar protTests/*
에 모든 파일을 protTests
보관하지는 않으며, 이름이 시작 .
되지 않은 파일 (숨겨지지 않은 파일) 만 보관합니다 . *
글로브 연산자는 이름이로 시작하는 파일을 건너 뜁니다 .
디자인을. 이 명령에는 protTests
파일이 많을 경우 (수천 개 이상) protTests/*
너무 많은 인수로 확장하여 명령 줄에 맞출 수 없다는 문제가 있습니다.
이와 같은 간단한 명령은 이러한 문제를 갖지 않습니다.
tar -cvf protTests.tar protTests
star
하는 것이 좋은 대안이며 그 이유로 그것을 찬성했습니다. 또한 "재미있는 캐릭터"이의 제기에 동의하지만 GNU tar
에는 -0
옵션 이 없으므로 절충안입니다. 나는 성능 반대에 동의 하지 않는다 . 그것은 실제로이 상황에서 아무런 영향을 미치지 않는다.
tar
와 bsdtar
이 --files-from
와 --null
(과 결합하면 이상한 문자의 문제를 제거하는 find
의 -print0
나 -exec printf '%s\0' {} +
). 그러나 여기서 --no-recursion
옵션 을 추가하고 싶을 것입니다 . 일부 pax
구현에는 -0
옵션이 있습니다.
내 tar 구현 이 가장 좋은 방법입니다
star -cv -f out.tar -find protTests ! -type l
zsh: command not found: star
독자의 99 % 이상이 시스템에없는 유틸리티를 언급 할 때는 어디서 구할 수 있는지 설명하십시오. 또한 자신의 제품을 언급 할 때 (링크 게시 여부에 관계없이 링크를 게시 할 수 있음) 소속을 공개해야합니다 .
--files-from
. 이것은 gtar의 옵션이므로, 여러분은 그러한 조언을합니다. 찾기에는 기본이 없으며-not
이것은 이식 할 수없는 또 다른 GNUism입니다. 일반적으로 별도의 찾기 호출을 사용하는 것은 좋지 않습니다. 파일 이름에 이상한 문자가 있으면 문제가 될 수 있으며 find와 tar가 파일 시스템을 스캔해야하므로 성능이 저하됩니다. 이러한 문제는 libfind를 사용하고 찾기 코드가 통합 된 star와 같은 프로그램에는 적용되지 않습니다.