find
일부 디렉터리를 선택하고 파일을 다른 위치에 복사하는 명령이 있습니다 ( --parents
. 내가 원하는 것은 명령에 의해 출력된 디렉토리가 find
내용 없이 복사된다는 것입니다(단, 소유권과 모드는 동일해야 합니다).
파일을 사용하거나 제한할 수 있지만 find
필요에 따라 기본 소유권과 모드를 사용하여 디렉터리가 생성됩니다. 옵션을 사용하면 디렉토리가 올바른 소유권과 모드뿐만 아니라 모든 파일과 함께 복사됩니다. 기본적으로 목록의 디렉터리가 해당 내용이 아닌 디렉터리 메타데이터만 복사하기를 원합니다.-type f
! -type d
-r
cp
이 목표를 달성하는 방법은 무엇입니까?
답변1
내 생각에 가장 간단한 도구는 입니다 . 디렉터리가 주어졌을 때 반복하지 않는다는 옵션이 pax
있기 때문입니다 .-d
따라서 디렉터리만 복사하려면 디렉터리가 복사되었는지 확인할 수 있도록 단계별로 수행하세요. 파일을 복사하지 마세요. 다음 작업도 수행할 수 있습니다.
find somewhere -type d | pax -wd > archive.tar
tar vtf archive.tar
( cd somewhere_else && tar xpf - ) < archive.tar
만족스러우면 아카이브 내용의 중간 인쇄(tar vxf archive.tar)를 제거하고 중간 archive.tar 파일을 파이프로 바꿀 수 있습니다.
답변2
GNU가 있다면 find
아마도 다음과 같을 것입니다.
find path/to/dir -type d -printf '%P\0' |
rsync -0av --files-from=- path/to/dir/ path/to/newdir/
당신이 원하는 것을 할 것입니다 ( -0av
로 대체하여 테스트하십시오 -0avn
).
rsync
검색 기준에 따라 전체 디렉터리 구조를 복사하는 등 적합한 필터를 개별적으로 사용할 수 있습니다.
rsync -avn -f'+ */' -f'- *' path/to/dir/ path/to/newdir/