작업 중인 클러스터에서는 rsync를 사용할 수 없으므로 cp
등 tar
을 사용해야 합니다 find
. 무시하면서 모든 파일과 하위 폴더 등을 포함하는 큰 디렉터리를 복사하고 싶습니다. 예를 들어 "file1", "file2" 또는 "file3"과 같은 이름을 가진 파일은 복사하지 않습니다.
나는 보았다이 문서는 SO에 관한 것입니다. 이를 통해 다음을 수행할 수 있습니다.포함하다특정 파일만. 나는 기본적으로 이것을 원하지만 나는 원한다들어오지 못하게 하다특정 파일.
나도 시도했다이 솔루션
하지만 거기에 제안된 명령을 사용하려고 하면 tar
오류가 발생 tar: This does not look like a tar archive
하고tar: Cowardly refusing to create an empty archive
나는 cp !(filename-to-ignore) new_dir/
또한이 게시물하지만 하위 폴더는 복사되지 않습니다.
저는 bash의 초보자이므로 답변과 플래그 등의 기능을 설명해 주시면 정말 도움이 될 것입니다. 지금 시도해 보았는데 어렵지 않을 것이라고 생각합니다.
답변1
GNU 또는 libarchive 사용 tar
:
(cd src && tar --exclude='file[123]' -cf - .) |
(cd dst && tar -xpf -)
GNU는 tar
파일 희소성을 유지하지 않으며 모든 확장 속성이 아니라 버전(또는 일부 운영 체제에 일부 패치가 있는 운영 체제)에 따라 달라집니다. (종종 이라고 함 libarchive
)은 확장된 속성을 유지하며 추출 시 옵션을 사용하여 희소 파일을 생성할 수 있습니다.tar
bsdtar
-S
파이프를 통해 서로 연결된 두 개의 하위 쉘을 실행합니다. 첫 번째는 (현재) 디렉토리와 모든 내용을 tar
재귀적으로 나타내는 스트림을 생성 .
하지만 이름이 패턴과 일치하는 파일을 무시합니다 test[123]
(정규 표현식이 아닌 쉘 glob 패턴과 유사하며 여기에는 test
{1, 2, 3 문자가 옵니다). } set)은 c
서브쉘의 현재 작업 디렉토리를 일시 중단 d
한 후 자체 작업 디렉토리()에서 스트림을 cd
동적 으로 추출합니다 .tar
dst
GNU는 다음과 같이 내부적으로 이 작업을 수행하도록 선택할 tar
수도 있습니다 .-C
chdir()
Gilles는 귀하가 링크한 Q&A에 표시됩니다.(한 가지 빠진 것이 있었는데 지금 추가하고 오류를 설명했습니다.) .
쉘을 사용하는 것보다 이점이 거의 없지만.cd
당신은 또한 볼 수 있습니다info -n exclude tar
파일은 GNU를 사용하여 tar
다양한 방법으로 제외할 수 있으며 더 일반적으로는info -n choosing tar
파일이 생성하거나 추출하는 아카이브에 파일이 선택/포함되는 방식을 조정합니다.