모든 파일 / 디렉토리 속성을 다른 파일 / 디렉토리에 복제 / 복사하는 방법은 무엇입니까?


15

한 디렉토리의 속성 (소유권, 그룹, ACL, 확장 된 속성 등)을 디렉토리 내용 자체가 아닌 다른 디렉토리로 복사하려고합니다.

작동하지 않습니다.

cp -v --attributes-only A B
cp: omitting directory `A'           

참고 : 일 필요는 없습니다 cp.


1
를 전달하지 않았 -r으므로 디렉토리를 무시합니다. 그러나 내용이 아닌 속성 만 복사하고 싶습니까? 못생긴 해킹 만 생각할 수 있습니다. 또한 installSELinux 컨텍스트를 보존 할 수 있습니다.
— lynxlynxlynx


1
@Gilles, 다른 주제를 지적 해 주셔서 감사합니다. 소유권과 모드 문제의 일부를 해결합니다. 확장 된 속성은 어떻습니까?
— Grzegorz Wierzowiecki

1
@GrzegorzWierzowiecki 확장 된 속성을 지원하는 도구는 거의 없습니다. 중요한 경우 킬러 미스트의 rsync 제안을 사용하십시오.
— Gilles 'SO- 악한 중지'

Btw. 다음은 xattrs가 작동하는 좋은 예입니다. KDE의 Dolphin GUI : imgur.com/oguuJNm 또는 브라우저에서 파일을 다운로드 한 URL : 참조 : gist.github.com/gwpl/a00e18bc150f1e3518335d13c5e46ad7 + freedesktop.org/ wiki / CommonExtendedAttributes + vhanda.in/blog/2014/07/tagging-your-files
— Grzegorz Wierzowiecki

답변:


13

커맨드 라인에서 약간의 시행 착오 끝에 대답을 찾았습니다. 그러나 cp관련 답변 이 아닙니다 .

rsync -ptgo -A -X -d --no-recursive --exclude=* first-dir/ second-dir

이것은 :

-p, --perms                 preserve permissions
-t, --times                 preserve modification times
-o, --owner                 preserve owner (super-user only)
-g, --group                 preserve group
-d, --dirs                  transfer directories without recursing
-A, --acls                  preserve ACLs (implies --perms)
-X, --xattrs                preserve extended attributes
    --no-recursive          disables recursion

참고로

    --no-OPTION             turn off an implied OPTION (e.g. --no-D)
-r, --recursive             recurse into directories

그 마지막 편집은 분명히 인기가 있습니다. 두 번째 디렉토리에 /가 있거나없는 경우 마침내 요청 된 것과 정확히 일치합니다.
— 킬러 미스트

후행 슬래시는 첫 번째 인수에만 차이가 있으며 두 번째 인수에는 차이가 없습니다. 매뉴얼 페이지 USAGE섹션의 3 번째 또는 4 번째 단락에 설명되어 rsync(1)있습니다.
— jw013

@ jw013 몇 달 전에 rsync 문서를 반복해서 읽은 후 첫 번째 (두 번째, 세 번째 등) 또는 마지막 인수에서 마지막 슬래시가 "내부"로 암시되었다는 결론을 내 렸습니다. 그러나 다시, 나는 종종 "into"영향을 암시 / 요구하기 위해 마지막 인수에서 /로 명령을 종료합니다.
— 킬러 미스트

내 직감은 모든 디렉토리 속성을 복사하고 일반 파일은 복사하지 않을 것 rsync -a -AX --include='*/' --exclude='*'입니다. 나는 테스트하지 않았습니다.
— Gilles 'SO- 악마 그만해'

@ jw013이 답변을 받도록 도와 주셔서 감사합니다. 작은 샌드 박스 테스트 환경에서 많은 옵션을 시도했지만 계속 가까이 다가 갔지만 일부는 제대로 작동하지 않습니다.
— killermist

0
chmod --reference=first-dir second-dir

2
이것은 재귀 적으로 작동하지 않으며 ACL 또는 확장 속성을 복사하지 않을 것이라고 생각합니다.
— Mat

1
재귀 적이 지 않아야합니다. OP는 "디렉토리 내용 자체가 아닙니다"를 요청했으며 허용되는 대답은 rsync를 알려줍니다 --no-recursive. 이 답변의 문제점은 ACL 또는 XATTR을 수행하지 않는다는 것입니다.
— ShadSterling

0
cp -rfp from_dir to_dir
  • -r -재귀
  • -f -힘
  • -p -속성 유지 : 모드, 소유권, 타임 스탬프

또한 필요 --attributes 전용
— smremde

0

다른 사람들에게는 효과가 있기 때문에 이해할 수 없지만 ZFS가있는 FreeBSD에서는 rsync 메소드가 실패합니다. 아무 반응이 없습니다. 그러나 Jean-François Dockes의 방법은 효과적입니다. ( https://www.lesbonscomptes.com/pxattr/ 참조 ) 원본 질문에서 소스 디렉토리 = A 및 대상 디렉토리 = B.

pxattr -lR A > tmp.EAs

(A 디렉토리를 B, s / A / B /로 변경하려면 tmp.EAs의 첫 번째 행을 편집하십시오)

pxattr -S tmp.EAs

따라서 다른 사람의 방법 만 추천하는 것이 아닙니다 . 당신은 다른 사람의 추천하고 프로그램을 , 맞죠? 괜찮습니다. 잘 알려지지 않은 비표준 프로그램에 대한 문서를 검색하는 데 5 분이 걸렸습니다. 사람들이 잘 알려지지 않은 비표준 프로그램을 다운로드하도록 권장하고 있다고 더 명확하게 언급하면 ​​좋을 것입니다.
— G-남자 '는 분석 재개 모니카'말한다

어깨를 으 It 포트 트리에 있습니다. 그것은 정확하게 비표준이 아닙니다. 그것은 모호하지 않으며 pyxattr나는 그것을 시도했다. 이것은 깨지기 어려운 종류였습니다. 아마도 gnu cp가 이것을 위해 작동하지만, 나는 그것을 만들 수 없습니다. 확장 속성은 이보다 더 가치가 있습니다. 또한 pxattr은 적어도 Linux, osx 및 bsd에서 작동합니다.
— cira

0
rsync -aAX --exclude='*' src_dir/ dst_dir

여기서 dst_dir-은 대상 디렉토리입니다. 또는:

rsync -dADXgot src_dir dst_dir

여기서 dst_dir-대상 dir을 포함하는 dir 또는 존재하지 않는 대상 dir입니다.

rsync 매뉴얼 페이지에서 :

    -a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
        --exclude=PATTERN       exclude files matching PATTERN

    -d, --dirs                  transfer directories without recursing
    -p, --perms                 preserve permissions
    -A, --acls                  preserve ACLs (implies -p)
    -X, --xattrs                preserve extended attributes
    -o, --owner                 preserve owner (super-user only)
    -g, --group                 preserve group
        --devices               preserve device files (super-user only)
        --specials              preserve special files
    -D                          same as --devices --specials
    -t, --times                 preserve modification times

-3

디렉토리를 복사하려면 "-r"이 필요합니다.


2
나는 당신을 오해했다고 생각합니다. 내용이 필요없고 xattr 만 필요합니다. SELinux 용인 경우 원래 디렉토리 (A)를 참조하는 chcon을 사용할 수 있습니다.
— tripledes

-r모든 하위 디렉토리 및 파일의 사본을 의미합니다 ... 전체 트리를 복사하고 싶지 않습니다 ... 내용에 영향을 미치지 않고 하나의 디렉토리에만 속성을 복사하고 싶습니다.
— Grzegorz Wierzowiecki
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.